写点什么

2.1 如何设计可扩展架构

作者:程序员小张
  • 2022-12-12
    湖南
  • 本文字数:1735 字

    阅读完需:约 6 分钟

复杂度模型

复杂度模型主要可拆分为质量复杂度和业务复杂度两大类。

业务复杂度:字面意思,业务比较复杂的系统,例如微信支付宝等等。

质量复杂度:质量可理解为高性能、高可用、成本、安全等质量属性。


根据复杂度的不用的应对模式


LAMP:LAMP 架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整台系统和相关软件,能够提供动态 web 站点服务及其应用开发环境。LAMP 是一个缩写词,具体包括Linux操作系统,Apache 网站服务器,MySQL 数据库服务器,PHP(或 perl,Python)网页编程语言。


SSH:ssh 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种 Web 应用程序开源框架。


SOA:被称为面向服务变成,系统被分为多个服务和一条数据总线,服务向数据总线注册,总线决定调用哪个服务。实际上 SOA 只是一种架构设计模式,而 SOAP、REST、RPC 就是为了实践这种设计模式而设计的数据通讯方式,其中 SOAP 通俗理解就是服务间通过 http+xml 的形式完成数据交换,REST 就是 http+json 的形式,RPC 是基于socket的形式。CXF 框架就是典型的 SOAP/REST 框架,Dubbo 就是典型的 RPC 框架,而 SpringCloud 就是遵守 REST 规范的微服务生态系统


DDD:领域驱动设计。不太了解.....


集群:一堆服务器合作做同一件事。


分片:简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。

数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。

(1)一种是按照不同的表(或者 Schema)来切分到不同的数据库(主机)之上,这种切分可以称之为数据的垂直(纵向)切分。

(2)另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。


可扩展定义

可扩展:分为可理解和可复用。可理解指你的系统的可理解程度,如果理解困难可能就要做可扩展,

可伸缩:系统通过增加资源来实现伸缩。


可扩展复杂度模型

说明:通过如下图手段来实现可扩展。


拆分复杂度模型


系统难以理解采用架构可扩展和应用可扩展,可采用微服务、分层的模式,拆分粒度用来指导拆分形态,拆分粒度分为外部复杂度和内部复杂度,外部负责度指的是业务流程设计对象数量来衡量,内部复杂度指的是一个系统模块由几个人来进行开发。其实一起来理解就是先从宏观上深思,再从微观处着手。

上面讲的都是架构和应用端如何用拆分去实现可扩展,但是落实到具体的手段这个就要靠架构师的经验了。


一般拆分粒度遵循的原则是先粗后细,进行拆分时也要考虑到团队人数和成本,拆分过细势必带来人力和维护成本的提高。


封装复杂度模型

如何封装主要是由业务是如何发展确定,当你能确定未来是如何发展时,这时就要做封装变化的改动了。这里预测变化也遵循两个原则,就是两年原则和 3 次原则。两年原则指的是只预测两年的内的变化,不要做过长时间的预测。3 次原则是当一个重复的改动达到 3 次时在进行封装。


当你确定发展方向时,这个时候要根据变化选择不同的封装方式。


规则引擎:

美团https://tech.meituan.com/2017/06/09/maze-framework.html?utm_source=ld246.com

知乎https://zhuanlan.zhihu.com/p/371831214?utm_source=ld246.com


微内核:

微内核只负责最核心的功能,其他功能都是通过用户态独立进程以插件方式加入进来,然后微内核负责进程的管理、调度和进程之间通讯,从而完成整个内核需要的功能。基本一个功能出现问题,但是该功能是以独立进程方式存在的,不会对其他进程有什么影响从而导致内核不可用,最多就是内核某一功能现在不可用而已。https://baijiahao.baidu.com/s?id=1685119440087797262&wfr=spider&for=pc


抽象层:个人理解类似 sdk 的东西。


随堂测验

1.主要还是从业务来考虑这个 hello world。


2.是的。可扩展分为可理解,可复用,可伸缩。

答:错误,可伸缩才是“添加资源提升性能”


3.并不是越简单越好,内部复杂度和外部复杂度是相反的。


4.是的。


5.要尽量保持可控性,技术只是一个工具,要保证技术与市场团队相匹配,让资源最大限度的利用。


思考题:

主要从质量和业务两个角度来分析。

参考答案:支付宝更复杂一些,支付宝的业务复杂度很高,这里说的微信不包括微信支付,其实微信支付主要是基于财付通的支付平台来做的,支付的复杂度是在财付通

用户头像

还未添加个人签名 2021-05-29 加入

还未添加个人简介

评论

发布
暂无评论
2.1如何设计可扩展架构_「架构实战营」_程序员小张_InfoQ写作社区