说明:整个架构学习总结是建立在李运华老师的课程之上。
一、微服务和SOA区别:
1、服务力度
SOA用ESB作为服务间通信组件。负者服务定义,服务路由,消息转换,消息传递。多个服务的协议和数据格式都不统一。
而微服务使用统一协议和数据格式。
2、服务间通讯
SOA服务力度更粗一些,例如员工管理系统服务。而微服务力度更细一些。例如员工注册服务。
3、服务交付
SOA对服务交付没有特殊要求。更多考虑的是兼容已有的系统; 微服务要求 快速交付 ,采取自己化测试,持续集成,自动化部署等方式敏捷开发。
4、SOA更加适用于庞大、复杂、异构的企业级系统,这也是SOA诞生的背景。微服务更加适合快速、轻量级基于WEB的互联网系统。
SOA和微服务并不存在孰优孰劣,只是应用场景不同。
二、微服务的陷阱
1、服务划分过细
服务划分细是可以降低单个服务内部的复杂度,但整个系统的复杂度上升了。因为将系统内的复杂度转移为系统间的复杂度了。
2 、服务数量过多,团队效率急剧下降。因为一个人要开发、维护很多服务,开发,测试,运维都变的很繁琐。
3、 调用链太长,性能下降。一次请求要经过多个服务的调用增加了网络传输,拉长了响应时间。
4 、调用链太长,问题定位困难。多个服务不好排查问题出在哪个服务中,并且故障存在扩散现象 。多个服务存在不同的故障就更加的难排查了。
5、 没有自动化支持,无法快速交付。如果都是靠人工操作 测试,部署,监控都很麻烦。
6 、没有服务治理,微服务数量多了以后管理混乱。
三、微服务方法:
1.、服务粒度
“三个火枪手” 原则。一个服务三人开发人员,如果开发团队一共9个人,就把系统划分为3个服务就好。
三个人的好处:
1.1,每个人都能全面理解整个系统,
1.2,可以形成一个稳定的备份,1人休假2个人还可以支撑
1.3, 三个人的小组能够形成有郊的讨论,能够快速达成一致意见。
2、拆分方法
2.1按业务模块划分,例如电商:商品,交易,用户服务
2.2基于可靠性拆分,系统中可靠性要求高的核心服务和可可靠性要求不高的非核心服务拆分。
2.3基于性能拆分,性能要求高或压力大的拆分出来。避免性能压力大的服务影响其他服务。
三、微服务基础设施篇
1.自动化测试
代码级的单元 测试、单个系统级的集成测试,系统间的接口测试
2.自动化部署
自动化部署系统包括版本管理,资源管理(机器管理,虚拟机管理) 部署操作,回退操作等功能
3.配置中心
运行期间需要动态修改并且所有节点生效,人工作无法完成。配置中心包括版本管理,增删改查配置,节点管理,配置同步,配置推送等功能
4.接口框架
一般采用http或RP方式统一接口协议,还需要统一接口传递数据格式,一般为JSON格式 :
5.api网关
微服务内部服务之单都是点对点的。但外部系统调用不能使用点对点方式(分不不清楚哪些服务提供哪些功能)。外部访问还涉及安全和权限相关限制。所以需要一个统一的API网关去负者提供外部系统的访问,他是外部访问的接口,所有外部系统接入都需要通过API网关。主要包括接入鉴权(是否允许接入)、权限控制(可以访问哪些功能)、传输加密,请求路由,流量控制等
6.服务发现
分为两种:
6.1 自理试
每个服务完成服务发现,例如,图中SERVICE INSTANCE A访问SERVICE REGISTRY 获取服务注册信息,然后直接访问SERVICE INSTANCE B
6.2 代理式
有一个负载均衡系统(图中的 LOAD BALANCER 节点),由负载均衡系统来完成服务之单的发现。这种方式风险大。一但LOAD BALANCER 系统故障,会影响所以服务单的调用。
7. 服务路由
有了服务发现后,服务之间能够获取相关的配置信息,但具体某次调用请求时,还要从所有符合条件的可用服务节点中选出一个具体的节点发起请求。服务路由一般不会设计成独立的运行系统,通常和服务发现在一起实现 。常见的服务路由算法 :随机,轮询,最小压力等。
8. 服务容错
多个节点服务会增加故障的概率。为了不让故障扩散,需要及时能应对故障情况。
常见的服务容错:请求重试,流控和服务隔离,服务容错通常也是集成在服务发现和服务路由系统中。
9. 服务监控
监控内容:机器 ,网络,进行,接口调用数等信息。
实时搜集信息并进行分析,避免故障后分析,减少自理时间
服务监控可以在分析的基础上进行预警。
通常情况 下,服务监控需要收集大量数据,并分析,建议做成独立系统。
10.服务跟踪
服务监控是节点的监控和信息收集,但要跟踪一个请求在服务中的完整路径就需要服务跟踪。
监控是宏观,跟踪是微观的。例如A服务通过http请求B服务10次,B通过http返回json对象。服务监控会记录请求次数,平均响应时间值,响应时间最高,错误分步这些信息; 而服务跟踪会记录基本某次的发起时间,响应时间,响应错误码,请求参数,返回参数等。
11.服务安全
部分敏感数据或者操作,只能部分内部服务可以访问。
服务安全主要分为:接入安全,数据安全,传输安全。通常情况下,服务安全会集成到配置中心系统,配置中心配置服务的接入安全策略数据安全策略,服务节点从配置中心获取这些信息后,在处理具体的调用请求时根据安全策略进行自理。这些策略是通用的,一般会把策略封装成通用的库提供各个服务调用,