写点什么

架构实战营毕业总结

  • 2021 年 12 月 05 日
  • 本文字数:1703 字

    阅读完需:约 6 分钟

架构实战营毕业总结


当软件系统越来越复杂,到了难以维护的地步,我们就需要找寻一个解决方法。架构设计就是为了降低软件系统复杂度为目标,而提供了一套方法。4R 架构提供了一个独特的视角,有助于理解架构的定义。4R 架构的 Rank 定义了系统的层级,Role 定义了系统里的各个角色,Relation 定义了角色之间的关系,而 Rule 定义了系统运作的规则以完成系统的功能。4R 架构可以应用在理解架构师职责,规划架构文档内容的完整性,以及策划如何学习架构。

 

架构设计三原则是指导架构设计的过程中避免犯下常见的错误。合适原则是要设计出可以满足应用场景需求的架构,不要生搬硬套大厂的架构,业界领先的架构未必适合每个场景。简单原则是要设计架构来解决单一问题,把问题逐个击破,反之越复杂的架构越容易产生更多问题,增加复杂度。演进原则是要从眼前的需求开始设计架构,逐步迭代,不要一开始就设计得太超前,未来的技术发展和环境的变化是很难预估的。

 

面向复杂度架构设计环是一个架构设计的流程,包括获取需求,做出判断,复杂度分析,进行拆解,设计多个备选架构,按架构设计三原则进行取舍,达致最终架构方案。其中复杂度分析包括高性能,高可用,可扩展,安全,成本。

 

可扩展是指系统适应变化的能力,复杂度包括可理解和可复用。可扩展可分为架构可扩展,应用可扩展,代码可扩展。架构可扩展是要降低可理解的复杂度,方法是通过拆分的形态和拆分的粒度,比如微服务拆分和 MVC 分层,要考虑如何拆分和拆分成多少个,来降低可理解的复杂度。应用可扩展和代码可扩展同时要降低可理解的复杂度和可复用的复杂度。应用和代码可拆分成 module/package/class。应用和代码可复用是依靠封装,通过预测变化和封装变化。预测的原则有 2 年原则和 1 写 2 抄 3 封装。封装的模型有规则引擎,微內核,面向对象,设计模式。拆分形态决定如何拆分,可以按照服务,模块,插件,或 package。拆分粒度可以根据内部复杂度和外部复杂度而定。

 

高性能复杂度分析包括单机和集群的计算高性能和存储高性能。单机计算高性能包括进程模型,网络模型,缓存模型。单机存储高性能包含存储模型。集群计算高性能和集群存储高性能模型都可以用任务分配和任务分解的方法。单机高性能模型主要都是编程技巧。进程模型有多进程和多线程。网络模型有 PPC/TPC 和 Reactor。缓存模型有本地缓存和独立缓存。存储模型有 B+tree 和 LSM。集群高性能任务分配是把一样的任务分成多份交给多个服务器执行。任务分配的设计关键点有运行形态,配置获取和算法。任务分配的案例有 DNS,Nginx,Memcached。任务分解是把服务拆分成不同角色,不同服务器处理不同业务。任务分解的设计关键点有任务拆分,运行形态,配置获取和算法。任务拆分包括读写分离和分库分表。任务分解案例有微信服务拆分,数据库读写分离,Zuul。

 

高可用复杂度分析包括计算高可用和存储高可用。计算高可用包括任务分配和任务分解。存储高可用包括数据复制和状态决策。数据复制的实现包括复制的格式和复制的方式。状态决策有独裁式,协商式,民主式。计算高可用复杂度分析与计算高性能相似,只多了一个状态检测。存储高可用复制格式有命令复制,数据复制,文件复制。复制方式有同步,异步,半同步,多数同步。数据复制要考虑数据一致性的问题。存储高可用复制案例有 Redis 和 MySQL。状态决策要考虑双主和脑裂的问题。存储高可用状态决策独裁案例有 RedisSentinel 和 Hadoop。民主式案例有 ZooKeeper 和 MongoDB。

 

基本上高性能,高可用,和可扩展已经可以涵盖架构设计中 80%的业务场景。剩下的 20%是提升架构设计质量的优化,包括低成本,安全性,可测试性,可维护性,可观测性。

 

鸡蛋篮子理论适用于以下场景:

  1. 鸡蛋篮子理论第一法则,拆分法则,降低可扩展复杂度。

  2. 鸡蛋篮子理论第二法则,叠加法则,降低集群高性能复杂度,可以用作任务分配和任务分解。任务分配时每个篮子的任务都是一样的。任务分解时每个篮子的任务都不一样。

  3. 鸡蛋篮子理论第三法则,冗余法则,降低高可用复杂度。

 

有了这些理论基础,架构师还要通过链式学习法,比较学习法,环式学习法,以掌握三个维度的技术能力,包括技术的深度,技术的宽度,技术的广度。再经过不断的训练,就可以提升架构设计的能力。

用户头像

还未添加个人签名 2020.08.24 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营毕业总结