新闻中心新闻详情
在如今分布式系统设计下,应用架构是如何进行演进的
2020-08-28 | 行业资讯

       随着业务的发展,应用规模不断扩大,系统内部的巨无霸应用就会越来越多,常规的垂直应用架构无法应对复杂的业务带来的各种问题。通过将业务公共部分抽象成原子服务,对复杂应用进行水平拆分和服务组件化,实现服务消费者和提供者的解耦,这样可以有效降低重复开发成本,提升开发效率。传统垂直应用架构的改造就在于服务化改造,而其使用的核心技术架构就是分布式服务框架,下面小编简单为大家介绍下几种应用架构的演进过程。


一.传统垂直应用架构:

       最经典的莫过于MVC垂直架构,在业务发展初期,应用规模小,可以有效支撑业务的发展,但到目前互联网大爆发时代,业务不断发展,应用规模日趋庞大,垂直应用架构模式的弊端日趋明显,大概有以下几点:

        1.复杂应用的开发维护成本变高,部署效率逐渐降低

        2.团队协作效率差,部分公共功能重复开发,代码重复率居高不下

        3.系统可靠性变差(所有应用模块集成在一个进程中)

        4.维护和定制困难(如:SaaS多租户技术架构)

        5.新功能上线周期变长

       对于第3点“系统可靠性变差”是最不能容忍的一环,因为其严重影响用户体验,随着业务的发展,访问量逐渐攀升,网络流量、负载均衡、数据库连接等都面临巨大压力,某个节点的故障会导致分摊到其他节点的流量陡增,引起"雪崩效应",对于高并发、大流量对系统的可靠性要求非常高,垂直应用架构节点的宕机情况也就越发突出,严重影响业务的正常运行。


二. RPC(Remote Procedure Call):

       当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快地响应多变的业务需求,同时将公共的API抽取出来,作为独立的公共服务供其他调用者消费,以实现服务的共享与重用,降低开发和运维成本。应用拆分之后会按照模块独立部署,对于相同模块也可基于多Region、多机房进行单元化部署,接口调用由本地API演进成跨进程的远程方法调用。

RPC框架的特点:

        1.简单:RPC语义非常清晰与简单,这样对于开发分布式系统就更加容易

        2.高效:过程调用看起来十分简单和高效

        3.通用:在单机计算中往往是不同的算法和API,跨进程调用最重要的是通用的通信机制

       RPC框架的目标是让远程服务调用更加简单、透明,RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/JSON/二进制)和通信细节等。框架使用者只需要了解谁在什么位置提供了什么样的远程服务接口即可。

       随着互联网的发展,各个厂商的RPC框架也都横空出世,比如:Thrift、gRPC、Tars、bRPC、Dubbo、ICE、ACE、Codra等知名RPC框架,各个RPC框架各有千秋,所支持的开发语言也有不同。没有最好用的RPC框架,只有最适合自己的框架。

       当服务越来越多时,配置管理变得非常困难,此时就需要服务注册中心,动态的注册和发现服务,使服务的位置透明。随着业务不断发展,调用量越大越大,存在的问题也就暴露了出来,比如:服务的容量问题,某个业务系统中的某个服务需要多少个服务实例,需要多少台机器,什么时候该增加机器,以及服务的上下线,对服务的生命周期管理以及监控,服务的访问安全策略等等问题。

       服务化之后,随之而来的就是服务治理问题,要不然系统将会是一盘散沙,业务架构逐渐腐化,要解决这些问题必须通过服务框架+服务治理来完成。


三. SOA服务化架构:

       SOA是一种粗粒度、松耦合的以服务为中心的架构,接口之间通过定义明确的协议和接口进行通信,SOA面向服务的一般原则:服务是可复用的、服务是松耦合的、服务是对底层逻辑的抽象、服务是可组合的、可编排的、服务自治、服务是无状态的、服务可被自动发现等,在这些背后,随着系统的不断变化,随之而来的问题也随之产生,其中SOA服务治理则是非常关键的,大概有以下几个方面:

        1.服务定义

        2.服务生命周期管理

        3.服务版本治理

        4.服务注册中心

        5.服务监控

        6.运行期服务质量保障(服务限流、熔断、迁入迁出、升降级、服务权重调整、超时控制等等)

        7.服务安全


四. 微服务架构

       微服务架构是一种服务化架构风格,通过将功能分散到各个离散的服务中以实现对解决方案的解耦,服务数量的激增会引起架构质量的变化,为了保证架构的高性能、低延时,则需要高性能的分布式服务框架保证微服务架构的基础设施。微服务主要特征有以下几点:

        1.原子服务(专注于做一件事,功能越单一,对其他功能的依赖就越少,内聚性就越强,"高内聚,松耦合")

        2.单元化部署

        3.敏捷交付

        4.微自治

        5.灰度发布

       对于微服务,如果玩不好它,也将带来各种各样的问题(这里运维老哥,心里估计已经开始鄙视开发者了),比如上百个服务之间的调用链增加了网络拓扑的复杂性,以及不同服务之间的调度带来的分布式系统相关问题(分布式事务、分布式一致性、分布式通信等),以及运维成本、测试、维护等问题。当然任何一种设计架构,伴随着业务的发展,都会出现它的弊端,新的技术也将应运而生。

       子曰:"工欲善其事,必先利其器",云上曲率在分布式服务系统不断迭代研发过程中,基于业务的发展需要,开发效率以及使用性上考虑,自研了一套纯C++编写的高性能RPC服务框架FPNN(Fast Programmable Nexus Network),并已开源(https://github.com/highras/fpnn 可查看具体介绍),开源仓库中带有各种主流语言的SDK,供不同开发人群使用,FPNN框架采用Epoll作为IO多路复用模型,采用多线程编程,是一种利用Reactor模式,模拟的Proactor事件处理模式,使框架可以作为高性能、高并发系统的底层RPC框架。

       FPNN使用也非常简单,上手极快,用一句话总结就是:客户端:一个API解决所有操作,服务端:一个类继承解决所有RPC,同步异步,编码解码问题。当然,

       就像前面说的,只有一个RPC框架你的分布式系统还是会遇到各种问题,因此我们基于框架自研了FPNN生态中需要的几种服务组件,例如:服务发现与注册中心(FPZK)、数据库透明代理(DBProxy)、大规模分布式集群测试系统(DATS)、数据行级缓存(TableCache)、监控运维管理系统(FPManager)、告警系统(FPMonitor)等等,这些各个公共服务组件与业务系统的服务之间协调起来,一起作业,共同保证了业务系统的高可用、高并发、高性能,满足了当下以及未来的用户暴增以及业务扩展需求。

微信公众号
更多资讯干货
敬请关注:
云上曲率公众号
Telephone consultation:
13820629335
Wechat
Contact sales