微服务架构理论基础入门
微服务热度
由图中可见,微服务在这几年的热度越来越高,越来越多的企业开始使用微服务,从而让微服务越来越火。
单体应用的痛点
1.部署效率低下
2.团队协作开发成本⾼(修改代码、合并分支)
3.系统⾼可⽤性差(一个包里面,一旦一个类出问题就会导致整个程序不能用)
什么是服务化
1)把传统的单机应⽤中通过JAR包依赖产⽣的本地⽅法调⽤,改造成通过RPC、HTTP产⽣的远程⽅法调⽤
2)把⽤户模块从单体应⽤中拆分出来,独⽴成⼀个服务部署
3)⽤户模块就可以独⽴开发、测试、上线和运维,可以交由专⻔的团队来做,与主模块不耦合
什么是微服务
1)一种架构风格。
2)开发单个应用作为一系列小型服务的套件,其中每个服务都运行在自己的进程中,并且通过轻量级的机制实现彼此间的通信,这通常是HTTP资源API。
3)这些服务是围绕着业务功能构建的,并且可以通过完全自动化的部署机制进行独立部署。
4)这些服务的集中式管理做到了最小化(例如docker相关技
术),每一种服务都可以通过不同的编程语言进行编写,并且
可以使用不同的数据存储技术。
微服务的特点
1)组件以服务形式来提供
2)是产品不是项目
3)轻量级通信、独立进程
4)分散治理、去中心化治理
5)容错性设计,整体性容错性提高了,一个出错了不影响其他的,但是个人压力大了
6)会带来团队组织架构的调整,如下图所示:
垂直团队组织架构大公司比较常见
微服务优点
1)服务简单、便于学习和上手,相对易于维护
2)独立部署,灵活扩展
下图是左边单体部署,右边是微服务部署
3) 技术栈丰富
微服务缺点
1)运维成本过高
2)接口可能不匹配
3)代码可能重复
4)架构复杂度提高
下图不同复杂度情况下微服务和单体应用的对比,所以需要合理的选择
微服务有两大门派
1)Spring Cloud:众多子项目(网关、配置器等经过实际考验的框架)
2)dubbo:高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
dubbo:zookeeper+dubbo+springmvc/springboot
通信方式:rpc
注册中心:zookeeper,nacos
配置中心:diamond(淘宝开发)
spring cloud:spring+Netflix
通信方式:http restful
注册中心:eureka,consul,nacos
配置中心:config
断路器:hystrix
网关:zuul,gateway
分布式追踪系统:sleuth+zipkin
dubbo 提供的能力只是 Spring Cloud 的一部分子集
图中的无只表示dubbo不提供,但是dubbo可以和其他的框架整合
微服务拆分
什么时候进行服务化拆分
1)第⼀阶段的主要⽬标是快速开发和验证想法
2)进⼀步增加更多的新特性来吸引更多的⽬标⽤户
3)同时进⾏开发的⼈员超过10⼈,这个时候就该考虑进⾏服务化拆分
不适合拆分的情况
1)小团队,技术基础较薄弱
2)流量不高,压力小,业务变化也不大(如:企业办公系统)
3)对延迟很敏感的低延迟高并发系统
4)业务稳定、迭代周期长
服务化拆分的两种姿势
1)纵向拆分(按业务维度拆分)
2)横向拆分 (按公共领域拆分)
注意:结合业务综合分析
微服务重要模块
1)服务描述
2)注册中⼼
3)服务框架
4)负载均衡
5)熔断和降级(保险措施)
6) 网关(统一网关提供给用户,方便用户)
7)配置中心
小结
本文章只是对微服务的发展做了简单的概述,后期将对微服务的各个模块的使用进行演示。
参考文章:
链接: http://www.martinfowler.com/articles/microservices.html.