应用服务架构一直处于不断演进的过程中,上图通过对比5种比较主流的架构模式,展示了应用架构的演进历程和变化。
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的祥云网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
在业务发展初期,为了快速落地应用、满足客户需求,一般会使用All in One的单体架构。
单体架构的特点是:在每个节点服务器中,包换应用的全部功能模块代码等所有模块都耦合在一个进程里,系统完全封闭且很复杂,牵一发动全局;应用系统很臃肿,维护和版本升级开销非常大。使用负载均衡分散访问会话,提高并发处理能力。
单体架构是围绕web容器打包及部署的架构模式,随着业务的快速发展,要求实现服务的快速迭代和快速交付,应用架构也演进为以服务为中心的架构模式。
RPC架构在现在应用系统的早期还是比较常见的架构模式,就是增加服务层,把冗余的代码和可以复用的业务应用进行拆分提取,封装成服务。系统架构更加清晰,代码质量提高,利于升级和维护,稳定性高。应用层可以更专注于与前端用户交互。业务处理放在服务层来进行,服务和应用的管理不是自动化,服务层能够实现HA的功能,适用中小型WEB系统的场景和高并发场景,性能比较好。RPC就是一个典型的RPC架构。
RPC架构也存在一些问题,通过共享分布式对象实现远程方法调用,如果在其中一个对象中添加一个属性,就会对共享对象的生产者与消费者产生影响,所以RPC架构也是紧耦合的模式。系统交互采用RPC私有TCP协议,服务生产者和消费者存在强代码依赖,对异构系统集成不友好。
个人认为SOA架构经历了两个阶段,一是以ESB中心化的架构,二是以注册服务为中心的服务注册发现架构(上图)。
ESB中心化架构实现了松耦合,依赖于ESB消息总线技术实现异构系统的信息交互和集成集中式架构管理,因此它虽然是面向服务的,但它本质上依旧是一个中心化的架构。
其优势在于:基于WebService技术,拥有重量级的消息通讯机制。当团队规模比较大、要实现异构系统集成时,它可以提供统一的解决方案和技术实现方式,快速集成异构系统对外服务。
以注册服务为中心的服务注册发现架构适用大型及超大型网站应用架构。所以ESB中心化架构的问题也比较明显:中心化架构难以满足灵活性的服务迭代和需求交付。
微服务架构实现了系统解耦和持续集成,有清晰的服务边界,相对ESB架构和传统SOA架构来说粒度更小,使用轻量级的通讯机制(HTTP+REST)交互,具备更强的扩展性和弹性,能够更灵活、更快响应业务变化。
服务网格架构是容器化的产物,引入了类似代理的Sidecar,在微服务SDK里面保留协议编解码能力,把服务注册与发现、负载均衡、熔断、限流、降级等服务治理能力下沉到Sidecar。当该 sidecar 在微服务中大量部署时,这些 sidecar 节点自然就形成了一个网格。
服务网格架构的优势:支持用多语言开发业务、省去或轻量化SDK,为异构服务框架/平台创造了融合和发展的机会,让服务框架/平台的演进更自主、更敏捷,让业务开发聚焦业务本身,无需关心安全、灰度、熔断、限流、降级等普遍服务,治理能力更敏捷、更好管控,加速业务探索。
Service Mesh的终局:Mesh所有协议或框架。目前货拉拉已经实现了Redis Mesh。
通过上述对比,我们不难发现,应用服务架构是在不断演进的,而且其演进背后存在一定的逻辑,服务架构的演进主要取决于以下2个维度:
综上所述,应用架构演进的底层逻辑就是: 一切为了敏捷(低投入,快速满足业务需求)。
货拉拉应用架构到现在为止经历了All In One Web的单体架构,RPC架构,与现在的微服务架构。
从2020年开始微服务化改造,当时阶段属于类似的RPC架构,是基于域名+HTTP的服务交互方式(图上)。痛点在于:
综合上述需要解决的问题,技术选型和参考的框架:
公司内部基础设施还未全面容器化,所以服务网格架构方式Istio先淘汰,剩下就是Dubbo和Spring Cloud。我们选型思考的出发点:框架上的缺点或者不足点是不是我们能接受或者克服的。
2020年Dubbo 3.0还未Release,所以我们研究了Dubbo 2.X。
我们对比后的结论是自研微服务框架,具体微服务体系中组件选型和设计思考如下:
框架设计参考Dubbo代码的分层架构和优秀设计:
① 参考FeignClient定义接口方式
@FeignClient(value= “XC-SERVICE-MANAGE-CMS”)
其中XC-SERVICE-MANAGE-CMS为下游应用的APPID,FeignClient在Spring Cloud体系中以APPID的方式发现服务。
② 参考jsonrpc4j接口的定义方式
@JsonRpcService("/path/to/MyService")
interface MyService {
... service methods ...
}
③ 泛化调用的接口定义方式
④ 标准JSONRPC接口的定义方式
服务治理管控平台:soa-admin控制台
未来往Service Mesh演进,但生产落地仍有挑战。
在一个已经很复杂的环境中引入代理、sidecar等组件会极大地增加运维的复杂性。
在容器编排器(如Kubernetes)之上添加Istio之类的服务网格,通常需要运维人员成为这两种技术的专家。
服务网格是一种入侵的、复杂的技术,它能向服务架构中添加显著的延迟。
服务网格的侵入性迫使开发人员和运维人员适应一个高度自治的平台,并遵守其规则。
当前标题:货拉拉应用架构演进,堪称单体落地微服务避坑指南
网站地址:http://www.mswzjz.cn/qtweb/news41/250491.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能