医药公司网站建设,南昌网站建设优化推广费用,一级页面的网站怎么做的,网站建设教程详解欢迎来到文思源想的架构空间#xff0c;前段时间博主做了一个工作经历复盘#xff0c;10年开发路#xff0c;走了不少弯路#xff0c;也算积累了不少软件开发、架构设计的经验和心得#xff0c;确实有必要好好盘一盘#xff0c;作为个人的总结#xff0c;同时也留给有缘…欢迎来到文思源想的架构空间前段时间博主做了一个工作经历复盘10年开发路走了不少弯路也算积累了不少软件开发、架构设计的经验和心得确实有必要好好盘一盘作为个人的总结同时也留给有缘读过的人带给一丝启发或者少走一点坑都是好事。于是有了这个文思架构笔记这个专题的想法未来会陆陆续续梳理一些自己总结的东西和正在发生的事情作为留存也作为纪念。今天是第一篇——关于剃刀思维 “如无必要勿增实体” 这句话来自奥卡姆剃刀原理的核心说明针对云服务架构它也是非常必要。老子说大道至简亚里士多德说自然界选择最短的道路产品交互设计也有个理念叫less is more -- 少即是多。它不只是告诉人们要做减法而是更多去思考我们实现功能外引入新的复杂度和问题充分考虑和权衡。
在云服务架构演进中我们看到了许多演进共同的现象为了多活我们引入了多活控制器为了一个新增业务避免老功能受到影响采用新增服务的方式隔离变化为了调用尽量少的改动我们将一个请求扩充到五六跳甚至更多。但是做法却同时也带了一些新的影响
首先服务调用链路更长了这引入了更高的服务治理复杂度我们不再是简单几跳解决一个请求而是更多的中转也带了更多定位问题的复杂性功能实现或许改动小了但是未来压测、定位复杂问题更多了。其次引入新服务和模块拆分微服务更多的其实应该考虑的是业务的解耦功能的复用而不是站在小组的角度考虑什么好做把几个功能聚合在一起微服务架构设计虽然必然走向康威定律的方向组织结构决定代码架构但是实际上是需要有人做好评审和管控的。新增服务并不一定是好事这个事情是需要评审和确定的或者做一做减法常常问一些新的问题 如果不要新增是否能完成功能如果新增服务带来哪些运维架构、安全、服务治理的隐患是否还有其他更好的解决思路。
接着还有多活这个话题通常多活在云服务架构里面有多种拆分方式集群方案和多活控制器当然采用上游负载均衡hash或者一致性hash找到下游服务的方式这无疑是最常用的解决思路但是他的问题也同样多
服务实体增多部署复杂度、部署规格要求逐步放大以前可能一个服务搞定的事情现在可能需要两个或者三个这里是实打实的成本上升私有云环境下以前可以四五十核搞定一个环境而如今不下数百核一个最小系统都不能完备。诚然我们功能在增多、业务在复杂但是我们每套云的用户数、规模并没有增大到数量翻倍的情况这里的问题就是引入实体但是没有做减法没有定期回顾看看哪里不合理。服务发现、服务间通信问题变得更加紧密定位问题也成为了一个难点再加上某些开源软件在调用链上的特殊性导致治理和灰度成为了很棘手的问题。
最后我想到的则是设计和建模中的抽象通常通过业务场景分析、用户动作行为拆解我们会在概要设计中产生许多概念但是落地的时候实际上是需要区分什么是视图层什么是核心层模型的把变化留在视图层而核心层模型的定义我认为是要经过头脑风暴和反复核对的
把多余属性拆解到极致去除掉一切冗余字段反思如何把业务用几句话说清楚弄清楚关键模型和关键动作然后还能看到未来的变化以及未来我们怎么应对变化
虽然他们不全是领域驱动设计但是也包含了领域驱动的一些思想。分析业务场景时候由少到多遍历细节建模归纳时候由多到少用核心模型、动作充分裁剪最后通过考虑特殊情况补充场景。最后的最后就是问一问能不能少一些实体少一些不一样的接口能否复用。
总之接口、模型、字段、调用、服务、业务他们都是所谓的实体如无必要勿增实体我们设计时候就需要考虑这些实体存在的必要性同时反思是否会带来影响其他必要实体的问题。功能实现简单性只是一个新增的理由我们更多想想未来治理的代码部署的复杂性额外新增的机器和研发消耗更多的精力以及冗余引起的争议和误会。我们不仅要实现功能还需考虑业务的解耦更要考虑实体的熵增。人熵增需要断舍离软件系统熵增则需要重构盘点、分析、归纳合并、设计、重构这个事情是需要持续进行是需要自上而下倡导最终最下而上显现。
当然剃刀思维还有一个关键就是我们有他但是最好不需要它。当一个不需要的实体存在这个实体就会开始证明自己存在的必要其他原来必要存在的实体也会因为他的存在而容易自发建立一套与它有关的新协作或者新习惯。老业务会通过新部门形成砍不掉的冗余流程豆浆机也会在你买菜时候提醒你多买一些吃不完的豆子这个时候在用剃刀就很难了剃了就会很疼很受伤然后就需要权衡有了犹豫。勿增实体而不是剃掉实体是因为剃刀思维的关键是一开始就找到这些不需要的实体防患于未然所以需求评审、架构设计、模型设计、调用流程设计都需要有这样的思考和审核从一开始就找到这些没有必要存在的实体。
剃刀的真意在于止“繁”存简 ----心存一刀只留必要心中有刀无需用刀才是最好的状态或许这是必字的另一种解释也是我们设计架构的一个需要重视的要诀。