当前位置:网站首页>有关架构设计的个人思考(本文后续不断修改更新)
有关架构设计的个人思考(本文后续不断修改更新)
2022-07-04 18:01:00 【RichardGeek】
前言
最近,参加了很多内部或外部的技术架构的分享,个人学习过程中也时常偶然偶尔在各种博客文章、公众号文章等其他情况下常常看到有关架构设计的资源资料。
其中的设计思想有很多是可以参考和借鉴的,本文针对个人粗浅的理解,进行个人总结和记录,仅供参考。比较关键的设计思想如Trade Off(权衡)、架构的健壮性考虑因素包含且不限于三高(高性能、高可靠、高并发)等、DDD领域设计(如领域事件、增加防腐层)、分层设计思想(MVC架构、适配层、类似DDD防腐层的Transformation Data数据转换层、业务层与存储层)等的层级间解耦思想等。
Trade Off
”权衡“,这个思想是最近我比较觉得有意思且个人很赞同的一种设计理念。有关架构设计流传一句”名言“:没有最完美的架构,只有最合适且适合的架构。
这个权衡包含很多因素,如当前的业务场景、可行性技术方案的落地成本(机器集群预算成本、开发人员人力成本、后期运维维护成本等等等),简而言之,有些决策是需要Boss层面考虑的,是投入与产出的trade off。以最低的成本做到当前最优的架构方案才是“王道”。
高可靠
这个段落除了简单的搭建服务集群,增加副本等常规设计思路。将从一些特别的”点“做到高可靠的能力。
一致性数据可靠
如在服务设计实现业务场景中考虑针对关键“业务节点”、“里程碑事件”做好数据的可靠性校验。
设计思想如:业务逻辑触发前、触发过程、结束后等关键阶段做好相应处理。”前期存储快照或通知、中期check、后期对账“。做好快照数据存储、事件通知或"double check"数据快照对账等等。考虑ODPS Flink/Spark 近实时/离线 流数据分析,比对。中央数据中心的统一数据准实时性、MQ事件通知&重试、后台Job Task check&alarm等、分布式事务的解决方案如TCC/2PC/3PC/消息记录表最终一致性柔性事务等。
高并发
高并发过程中常常有”加锁“的设计思想,用于保障并发过程的某些”顺序“特性场景。而分布式加锁场景常见的如利用其他中间件实现:如Redis的lua脚本/setNx/watch Dog/Redission等等,zookeeper的顺序临时节点加watch机制,mysql等数据库的悲观锁 如select ... from table where status=' ' for update等。
除了类似“悲观锁”的实现(对并发性能影响较大,又类似上面说的trade off权衡的概念),还可以利用”乐观锁“ 如CAS(compare and swap)思路。防止ABA问题 可以再增加一列快照版本号保证。 mysql 库实现乐观锁举例如update .... where status=' ' and snapshot_version=' ';
架构设计的流程阶段
调研 - 技术选型
关注点评估:
1、调研相关技术的生态环境。如技术社区活跃程度、未来的持续发展前景等
2、学习、开发成本问题。新技术的”上手“效能、后期的二次开发能力、团队的接受性(如是否跨语言,跨技术栈)
3、横向与纵向对比技术框架或架构方向的优劣势。如三高(AP or CP)的实现与支持、长远考虑后续可能的“迁移”成本、是否支持跨机房、多数据中心存储、多集群多租户隔离等、数据迁移的平滑程度
4、评估性能。CPU、Mem、网络IO、磁盘占用等对机器性能的最低支持。高并发Multi Request、吞吐量、响应耗时RT、容错能力等指标
etc...
Demo - 实现试用
性能评估&压测
灰度-小范围试用
全面升级&使用
边栏推荐
猜你喜欢
大div中有多个div,这些div在同一行显示,溢出后产生滚动条而不换行
Lenovo explains in detail the green smart city digital twin platform for the first time to solve the difficulties of urban dual carbon upgrading
千万不要只学 Oracle、MySQL!
A method of using tree LSTM reinforcement learning for connection sequence selection
与二值化阈值处理相关的OpenCV函数、方法汇总,便于对比和拿来使用
node_exporter部署
整理混乱的头文件,我用include what you use
在线文本行固定长度填充工具
牛客小白月赛7 谁是神箭手
Oracle with as ora-00903: invalid table name multi report error
随机推荐
LeetCode 赎金信 C#解答
Pytorch学习(四)
与二值化阈值处理相关的OpenCV函数、方法汇总,便于对比和拿来使用
Using SSH
Send and receive IBM WebSphere MQ messages
爬虫(6) - 网页数据解析(2) | BeautifulSoup4在爬虫中的使用
876. Intermediate node of linked list
Unity编辑器扩展C#遍历文件夹以及子目录下的所有图片
2014 Hefei 31st youth informatics Olympic Games (primary school group) test questions
2014合肥市第三十一届青少年信息学奥林匹克竞赛(小学组)试题
Is Guoyuan futures a regular platform? Is it safe to open an account in Guoyuan futures?
Unity editor extends C to traverse all pictures in folders and subdirectories
[发布] 一个测试 WebService 和数据库连接的工具 - DBTest v1.0
升级智能开关,“零火版”、“单火”接线方式差异有多大?
1672. Total assets of the richest customers
The latest progress of Intel Integrated Optoelectronics Research promotes the progress of CO packaging optics and optical interconnection technology
如何使用Async-Awati异步任务处理代替BackgroundWorker?
.NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)
876. 链表的中间结点
Shell programming core technology II