.Net微服务实战之负载均衡(上)

.Net微服务实战之技术选型篇

.Net微服务实战之技术架构分层篇

.Net微服务实战之DevOps篇

 相关源码:https://github.com/SkyChenSky/Sikiro

PS:最近开始在找工作,如果在广州地区需要技术管理岗的(.Net架构师、技术经理)可以随时联系我,微信:SkyChen_Gong。

分布式?集群?负载均衡?

  我曾经面试过一家企业,当时描述完我在老东家完成的微服务架构后,面试官问了我一个问题:

  面试官:您有做过分布式系统吗?

  我:有,刚刚我描述的微服务架构就是分布式的……

  面试官:不不不,我意思是你有没有尝试过把一个站点部署到多台服务器上?

  我:哦……你意思是我有没有用过类似nginx这些工具做负载均衡是吧?有,现在我们就这么做的。但是我对分布式理解是工作方式,但是你描述的更多具体称之为集群或者负载均衡。

  面试官:对对,大家的站在的观点不一样所以理解的不一样(尴尬的笑了笑)

PS:首先我申明下我没有对该面试官有任何贬低嘲讽之意,也没刻意突出谁对谁错,面试完了后我回去回想了下我的回答并找到些资料做出以下总结。

分布式

  分布式计算是指系统的工作方式,主要分为数据分布式任务分布式:

  数据分布式也称为数据并行,把数据拆分后,利用多台计算机并行执行多个相同任务。优点是缩短所有任务总体执行时间,缺点是无法减少单个任务的执行时间。

  任务分布式也称为任务并行,单个串行的任务拆分成多个可并行子任务。优点是提高性能、可扩展性、可维护性,缺点是增加设计复杂性。

负载均衡

  负载均衡(Load Balance),简称LR,就是将并发的用户请求通过规则后平衡、分摊到多台服务器上进行执行,以此达到压力分摊数据并行的效果。

集群

  集群是系统在负载均衡结果后的物理表现,系统(服务)通过部署到多台服务器以达到共同提供相同的功能,可以称这一组服务为某某集群,例如Redis集群,某Web站点集群。

负载均衡器 作用

  负载均衡器的分类有很多,而他们的作用主要体现于架构要素的其中三个:可用性、性能、安全

  可用性,多台服务器的部署避免了单点故障。

  性能,一台Web站点能提供每秒4000次的并发请求,5台服务器构成的一个集群就可以达到20000。

  安全,通过反向代理到真实服务器,避免直接路由到高危Web服务,避免开放危险端口。

算法

  常用的负载均衡算法主要以下4个:

加权轮询

随机

最少链接数

哈希

分类

  从制造上主要分为软件负载硬件负载:

  软负载,包含了Nginx、LVS、HAProxy等。

  硬负载,包含了F5、Array等。

  从量级上主要分为:百万级数十万级、万级

  百万级,硬负载,例如F5、Array。

  数十万级,第四层负载,LVS、HAProxy。

  万级,第七层负载,Nginx。

  当然从成本上,硬负载绝对是土豪公司的工具,便宜的十来万RMB,贵则上百万RMB。而软负载只需要一台Linux服务器的钱就足够了。此外LVS的部署复杂度相比于Nginx会高那么一点,但是Nginx的七层负载的灵活性是四层负载的无法比拟的。

.Net微服务实战之负载均衡(上)

  在实际工作中大家更多会接触到上图的架构模型,从功能职责上又可以划分地域级、集群级和应用级的负载:

  地域级的负载均衡使用的是DNS的智能解析来完成的DNS全称Domain Name System,中文叫域名系统(服务)协议,一般都会采用云服务厂商的DNS系统,我们知道域名是需要花钱购买的,而厂商会附带一个免费的域名解析套餐,如果需要对域名进行域名智能解析,就需要付费给厂商获取相应的服务。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygdjz.html