梁桂钊 | 作者 

 本文摘自「服务端思维」知识星球 2019/01/09 期分享

经常有人会问:能介绍下你做过最复杂的系统吗?对此,你被人问起过吗,你思考过什么标准才算复杂吗?

系统的复杂性包括了技术复杂性和业务复杂性。有人抱怨道:我做的系统一点都不复杂,你看我们数据量不大,用不上分库分表,业务也不复杂,单体系统就够了,什么负载均衡和集群也没有,流量也不大,高并发和分布式也没接触过。何为技术复杂性,我上面提到的都算,随着业务的发展,我们的系统架构需要支持大数据和高并发,因此复杂的系统架构孕育而生,在数据库层面要考虑分库分表,读写分离,主备切换;为了提高查询性能和单点问题,分布式缓存必不可少;为了销峰限流和服务解耦,分布式消息中间件也要用上;大促期间,为了保证稳定性,还要机器自动伸缩,服务降级、服务隔离、服务熔断、服务限流等都是常用套路。此外,分布式还有分布式调度系统,分布式监控系统,分布式日志系统,分布式链路采集等等。事实上,所以系统都是分布式的,单点故障是无法忍受的。说到这里,你觉得这系统太复杂啦。对的,为了构建高可用,可伸缩的分布式系统确实复杂。但是,技术架构只是技术复杂性的其中一块罢了。试想,一个复杂的算法算不算技术复杂性呢?我觉得也算。一个好的算法,可以帮助我们解决很多复杂的业务问题。这里,对于我们非算法工程师而言,如果能把业务问题转换成算法问题,我就可以把人工问题转换成智能化,那么我们的业务离商业智能又迈进的一大步。说 AI 可能远啦,聊点近的,比如延迟队列的“时间环”算法,ZK的会话分桶算法,限流的令牌桶等,很多偏业务实战方面的落地也可以让我们做得事情充满含金量,换句话说,吹逼层次可以提高了好几个 Level 哈。技术复杂性,还可以是解决多数据源的聚合查询问题,解决数据多写同步以及一致性问题等。抛砖引玉,仅供参考。

业务的复杂性在于:不同业务与业务之前相互作用与干扰。做过 2B 产品或者项目的小伙伴应该非常理解我所说的含义,因为适配不同企业和商家做定制化需求会导致产品越来越无法通用化,尤其 ERP 这种强业务定制的系统。那么,为了维护多套类似的逻辑和代码是成本巨大的,因此设计可扩展性的系统尤为重要。很多时候,我们对需求的变化是不可预期的。这种不可预期性恰恰是业务复杂性所在。事实上,架构设计都是基于当下的设计,一个设计的好坏在于:它是否可以快速地支持业务。换句话说,我设计的系统满足了当前的业务,但是它后期无法可扩展,那么这个设计是好是坏呢?此外,我们根据领域模型作出了良好的设计,但是随着业务的发展,每个模型耦合越来越重。那么,请思考是领域模型不合理,还是架构设计的不合理,还是业务发展的太快了呢?或者,在思考一个问题。一个公司觉得业务中台的概念很好,也打算落地实践,但是呢,它的业务比较单薄,那么,此时它设计的业务中台具有通用性吗?我个人感觉,不太好说。事实上,需要不停的业务滋养,只有滋养中才能从最初仅提供单薄业务功能的服务逐渐稳定成一个解决具体问题的业务领域模型。设计模式的有一个模式叫做「模版方法模式」,它的核心思路在于把公共的流程固化下来,把差异点移交给具体的业务方去实现。是吧,只有我们有足够多的业务场景,我们才能沉淀出那些是公共的逻辑,那些是可扩展点,然后在业务设计过程中,我们可以在本业务实现子类做自定义实现,或者提供 SPI 给业务介入方扩展。总结一下,业务的复杂性在于:不同业务与业务之前相互作用与干扰,以及我们对需求的变化是不可预期性。你以为我说到这里就结束了吗?当然,不是。我更多的是想引发你的思考以及我们思维的碰撞。例如,很多人抱怨自己是 CRUD 工程师。我觉得这些人太小看自己的价值了。业务的价值和复杂往往不是 CRUD,而是业务背后的价值思考。线下的业务线上化,传统的东西在线化,那么它就具有结构化存储的能力,可以和其他数据协同,那么,它就有价值。此外,你是不是可以把 CRUD 的流程自动化,本来一天搞定的东西,你1分钟就搞定了,然后在花59分钟来实现业务差异性。可以了吗,当然不行。你是不是可以把59分钟在压缩压缩,写一个框架,把多分支的问题通过策略模式+工厂模式搞定呀,固化流程通过模版方法模式搞定哈,然后观察者模式、适配器模式、代理模式、责任链模式、状态模式都可以用一用。事实上,很多设计模式是解决复杂业务场景的可扩展经验套路。

最后总结一下,系统的复杂性包括了技术复杂性和业务复杂性。我们一起畅聊,学习,成长,打破认知的局限性!!!

「面试题」介绍你做过最复杂的系统相关推荐

  1. 「主数据架构」介绍下一代主数据管理(MDM)

    「主数据架构」介绍下一代主数据管理(MDM)  首席架构师 2019-11-29 17:31 主数据管理是旨在创建和维护权威.可靠.可持续.准确.及时和安全的环境的过程和技术框架.这个环境代表了一个单 ...

  2. 开发2年半,「纪念碑谷」的团队做了一款开放世界“观鸟”游戏

    如果你随便抓一个路人问他/她在手机上玩过最有艺术感的游戏是什么,相信大概率会得到的答案是「纪念碑谷」. 这款由英国Ustwo Games在2014年公布的作品极具个性和创意,在当时一众良莠不齐的移动游 ...

  3. 「笔试题」最近做了一个招银网络科技Java岗位在线笔试题,给有需要的朋友了解学习一下!

    编程题一 大概意思是,给一段字符串,然后统计该字符串中相同字符个数,并以字符串+该字符串个数组合排列成新的字符串.如输入" sssdhibdhidhi " ,需要返回结果 &quo ...

  4. 「业务架构」介绍BPMN第二部分-泳道

    游泳池里有专门为游泳者设计的泳道.游泳的人有自己的泳道,不用穿过另一条泳道.泳道的概念也存在于BPMN中. BPMN中的泳道对象(也称为泳道)是表示业务流程参与者的矩形框.泳道可能包含由该泳道(参与者 ...

  5. 4由通道检测_大唐阜新煤制天然气「榜样力量」实训做实出实效——废水总酚检测时间由4小时缩短至10分钟...

    今天为大家讲述的正是这样一个需要全体外出实训员工学习的榜样,这个故事就发生在分析中心经理徐胜利身上. 有目标就会有方向.有动力 出发之前,徐胜利就暗自下决心,要不虚此行.刚到克旗公司,他便着手协调成立 ...

  6. windows查看linux文件工具,「实用工具」介绍几款Windows系统与Linux服务器传递文件的工具...

    本文主要介绍几款用于和linux服务器传递文件的工具 WinSCP WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端.同时支持SCP协议.它的主要功能就是在本地与远程计算机间 ...

  7. 测试工程师「 面试题 」那点故事

    文章目录 1.公司的测试流程怎样的? 2.你提一个bug,开发不认同的话怎么办? 3.熟悉数据库吗,出道SQL题写出来? 4.熟悉Linux吗?常用的命令有哪些? 5.熟悉adb命令吗?常用的有哪些? ...

  8. 属于「ALL BLACK」的魅力 做不被定义的自己

    黑色,永远的经典色,流行色有时就像稍纵即逝的"昙花",掀起了一阵浪花过后,又迅速风平浪静,但有些颜色却能万年永存,经典不败,黑色就是其中之一. 从服装元素的角度看,黑色的使用很容易 ...

  9. 「数据架构」介绍下一代主数据管理(MDM)

    主数据管理是旨在创建和维护权威.可靠.可持续.准确.及时和安全的环境的过程和技术框架.这个环境代表了一个单一版本的事实,作为跨不同的系统.业务单元和用户社区的可接受的记录系统. 尽管MDM不是新的,但 ...

最新文章

  1. 面试题:请用代码实现ip地址与int之间互换?
  2. 如何让ThinkPHP支持模糊搜索
  3. 【NetApp】安装Cmode模拟器时,应使用带交换机的模式
  4. JZOJ 5475. 【NOIP2017提高组正式赛】逛公园
  5. SQL注入 ——sql数据库操作基础(一)
  6. java压缩成.tar_java压缩tar.gz | 学步园
  7. php wiki搭建,wiki网站搭建
  8. OpenGL基础16:视角
  9. 图书管理系统/库存管理系统等计算机毕业论文设计
  10. 软考中级网络工程师学习笔记(知识点汇总)普通版
  11. python 英文 词频分析软件_有哪些软件可以进行中文词频分析?
  12. gis热力专题图制作
  13. 微型计算机故障分为哪几类,西南大学19秋[0240] 计算机维修技术在线作业
  14. 监控io性能、free命令、ps命令、查看网络状态、linux下抓包
  15. python 发送邮件正文字体设置_smtplib文字邮件的发送
  16. 计算机二级考试中Excel函数如何应用,计算机二级考试excle常用函数【计算机二级ms office中excel中必考函数有哪些?】...
  17. 教育培训python
  18. Linux下升级jdk版本
  19. 关于数据挖掘中“多重共线性”的确定方法(有图有真相)
  20. 微型计算机配置清单办公,式电脑配置清单.doc

热门文章

  1. 磁金融宣布完成1.2亿元B轮融资,宽带资本领投
  2. Tomcat的设置1——设置根目录
  3. Linux Top命令详解(载自百度经验)
  4. 模拟业务最小测试用例01
  5. IOS开发之——颜色设置
  6. json数据解析详解---代码每行进行分析
  7. mysql性能监控指标及分析
  8. 利用js实现table增加一行
  9. 两级式三相光伏并网逆变器matlab/simulink仿真模型
  10. 基于licode搭建webrtc服务器