【软件架构】02-复杂度来源

1、性能

1)单机

受限于主机的CPU、网络、磁盘读写速度等影响

在多线程的互斥性、并发中的同步数据状态等;

扩展:硬件资源、增大线程池

2)集群

微服务化拆分,导致调用链过长,网络传输的消耗过多。

集群下的任务分发

分布式下的任务拆分、合并

扩展:服务、主机的水平扩展

常见的系统性能列表:

1、Nginx 负载均衡 3万

2、LVS 十万级

3、F5 百万级

4、Memcache 读写TPS 5W

5、Redis 5-10万

6、kafka百万级,

7、zookeeper写入读取2万以上

8、http请求访问大概在2万左右

9、Tomcat 2000左右并发;最大连接数为200

10、RocketMQ 10WQPS

2、高可用

1)计算高可用

冗余:通过水平扩展计算节点,每个节点都是无状态,从而达到分摊任务的目的

2)存储高可用

由于网络延迟、主机故障等问题,导致数据产生最终一致性问题。

主备模式:主节点宕机会导致不一致

双主模式:要求同步双写主节点

独裁:一主多从,要求从节点向同一个主节点发起请求,由主节点决策,典型代表有Zookeeper

协商:由多数投票通过,设立主节点。其他节点作为备节点

民主模式:各节点都参与投票,获得多数票的作为决策。存在脑裂问题(要求多数票必须大于总节点的一半以上)

3、可扩展

1)成功预测变化

多数据源的兼容、本地存储/网络存储/分布式存储、国产化服务器兼容等

2)完美封装变化

分解 变化层、稳定层,双方对外暴露接口,提供调用

构建抽象层、实现层

参考**装饰器模式**

  1. 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
  2. 具体构件(ConcreteComponent)角色:实现抽象构件,通过装饰角色为其添加一些职责。
  3. 抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
  4. 具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。

4、低成本

成本与高可用、性能成相反作用,以附加的约束条件,作为备选考虑

5、安全性

功能安全:XSS、SQL注入攻击、CSRF、DDos攻击等

架构安全:地址白名单、访问鉴权、数据/权限分组隔离、防火墙等

6、规模化

量变引起质变,大规模部署引起的运维、监控复杂度不断增加

大数据治理

相关推荐
a_ran5 个月前
修复所有 bug 并不能解决所有问题
bug·软件开发·软件架构
我想这条路10 个月前
Rt-Thread 移植8--定时器的实现(KF32)
c语言·嵌入式·软件架构
susemm1 年前
3. 理解质量属性
软件工程·软件架构
ttod_qzstudio1 年前
软件架构设计(业务架构、应用架构、数据架构、技术架构)
软件架构
阿布~1 年前
软件架构之前后端分离架构&服务器端高并发演进之路
架构·软件架构·前后端分离架构
A尘埃1 年前
软件架构模式+系统架构
系统架构·软件架构
码中之牛1 年前
Android开发之性能优化:过渡绘制解决方案
android·性能优化·framework·移动开发·软件架构
码中之牛1 年前
深入理解与运用Android Jetpack ViewModel
android·笔记·移动开发·android jetpack·软件架构
码中之牛1 年前
面试笔记:Android 架构岗,一次4小时4面的体验
android·笔记·面试·架构·移动开发·安卓·软件架构