第一章:应用架构演进
image.png
一.垂直应用(典型:MVC架构)
1.基本架构
image.png
1)view:前段视图展示层。
2)control:中间为调度控制层,用于web请求转发,调度后台业务逻辑执行。Eg:structs
3)model:应用模型层,代表:业务数据和业务执行逻辑。
备注:
标准MVC不包含数据访问层。原生数据连接库JDBC访问比较麻烦,通过ORM(Object Relation Mapping:对象关系映射)框架,比如Hibernate、Mybatis等框架进行封装。
2.特点
1)部署方式:基于MVC架构等应用代码会:统一打包成war包,部署到tomcat等服务器中。不同应用之间通过:本地API进行调用,基本不存在跨进程通信。
2)业务组网:
1⃣️:小规模:热双机部署,服务端监听浮动IP,通过Watch Dog检测应用进程。判断应用进程宕机或僵死之后,将应用切换到备机中,然后尝试重新拉起主机。
2⃣️:高并发,大流量:集群部署;组网方案:前段通过F5等负载均衡器做七层负载均衡,后段做对等集群部署。
image.png
3.缺点:
1)复杂应用开发维护成本高,部署效率逐渐降低;
2)团队协作效率差,部分公共功能重复开发;
3)系统可靠性变差;
4)维护和定制困难;
5)上线周期长
当垂直应用越来越多,应用之间交互不可避免。解决方法:
1)将核心业务抽取出来,作为独立当服务,逐渐形成稳定当服务中心;
2)将公共能力API抽取出来,作为公共当服务,供其他服务共享和重用;
3)应用拆分之后按模块独立部署,接口调用由本地API演进到RPC调用;
RPC框架应运而生
二.RPC架构(典型:GRPC, RESTFUL等)
RPC:Remote Process Call,远程过程调用,是一种进程间通信方式,允许像调用本地服务一样调用远程服务。
1.原理
RPC框架目标:让远程过程(服务)调用更加简单、透明。
做法:RPC框架负责屏蔽底层的传输方式(TCP OR UDP),序列化方式(XML/JSON/二进制),通信细节。
image.png
一般有三种角色:
1)服务提供者:运行在服务端,负责提供服务接口定义和服务实现;
2)服务发布者:运行在服务端,负责将本地服务发布成远程服务,供其他消费者调用;
3)本地服务代理:运行在客户端,通过代理调用远程服务提供者,然后将结果进行封装返回给本地消费者。
2.挑战
未大规模服务化之前,应用可能只是通过RPC框架,简单等暴露和引用远程服务,通过配置服务等URL地址进行远程服务调用。
1)服务越来越多时:需要统一的服务注册中心,动态等注册和发现服务,使服务等位置透明。比如:ZK
2)随着业务发展,服务之间依赖关系变等错综复杂:需要一个分布式消息跟踪系统可视化展示服务调用链,用于依赖分析,业务调用路径梳理。
3)服务调用量越来越大时:服务容量问题暴露,需要容量规划,及时扩容与缩容。
4)服务的统一生命周期管理。
服务化之后,随之而来的就是服务治理问题。
服务框架+服务治理成为发展方向。
三.SOA服务框架(DUBBOL)
SOA:Service Oriented Architecture 面向服务架构, 是一种粗力度,松耦合的以服务为中心的架构,接口之间通过定义明确的协议和接口进行通信。
1.服务框架
设计原则:
1)服务可复用
2)服务共享一个契约
3)服务松耦合
4)服务可组合,可编排
5)服务是自治的
6)服务是无状态的
7)服务是可被自动发现的
2.服务治理
治理内容:
1)服务定义
2)服务生命周期管理
3)服务版本治理
4)服务注册中心
5)服务监控
6)运行期服务质量保障
7)快速故障定位
8)服务安全
SOA服务框架中对服务是粗粒度对,为了最大限度利用服务化功能,对服务做进一步细粒度对拆分,形成MSA架构。
四.微服务架构(MSA)
MSA:Micro Service Architecture 微服务架构是一种服务化架构风格,通过将功能分散到各个离散到服务中以实现对解决方案对解耦。
1.微服务特征
1)原子服务,专注做一件事情
2)高密度对部署:重要对服务可以独立进程部署,非核心服务可以合并打包,部署到一个进程。
3)敏捷交付:粒度越小,越敏捷;
4)微自治:服务足够小,功能单一,可以独立打包,部署,升级,回滚等,不依赖其他服务,实现局部自治。
2.微服务架构对比SOA
1)服务拆分粒度
2)服务依赖
3)服务规模
4)架构差异
5)服务治理
6)敏捷交付
总结:量变引起质变。
网友评论