.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的七层负载的灵活性是四层负载的无法比拟的。
在实际工作中大家更多会接触到上图的架构模型,从功能职责上又可以划分地域级、集群级和应用级的负载:
地域级的负载均衡使用的是DNS的智能解析来完成的,DNS全称Domain Name System,中文叫域名系统(服务)协议,一般都会采用云服务厂商的DNS系统,我们知道域名是需要花钱购买的,而厂商会附带一个免费的域名解析套餐,如果需要对域名进行域名智能解析,就需要付费给厂商获取相应的服务。