美文网首页码出未来老男孩的成长之路互联网科技
「面试题」介绍你做过最复杂的系统

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

作者: 码上搞定 | 来源:发表于2019-09-16 15:48 被阅读0次
经常有人会问:能介绍下你做过最复杂的系统吗?对此,你被人问起过吗,你思考过什么标准才算复杂吗?

系统的复杂性包括了技术复杂性和业务复杂性。

有人抱怨道:我做的系统一点都不复杂,你看我们数据量不大,用不上分库分表,业务也不复杂,单体系统就够了,什么负载均衡和集群也没有,流量也不大,高并发和分布式也没接触过。

何为技术复杂性,我上面提到的都算,随着业务的发展,我们的系统架构需要支持大数据和高并发,因此复杂的系统架构孕育而生,在数据库层面要考虑分库分表,读写分离,主备切换;

为了提高查询性能和单点问题,分布式缓存必不可少;

为了销峰限流和服务解耦,分布式消息中间件也要用上;

大促期间,为了保证稳定性,还要机器自动伸缩,服务降级、服务隔离、服务熔断、服务限流等都是常用套路。

此外,分布式还有分布式调度系统,分布式监控系统,分布式日志系统,分布式链路采集等等。事实上,所以系统都是分布式的,单点故障是无法忍受的。说到这里,你觉得这系统太复杂啦。对的,为了构建高可用,可伸缩的分布式系统确实复杂。

但是,技术架构只是技术复杂性的其中一块罢了。

试想,一个复杂的算法算不算技术复杂性呢?我觉得也算。一个好的算法,可以帮助我们解决很多复杂的业务问题。

这里,对于我们非算法工程师而言,如果能把业务问题转换成算法问题,我就可以把人工问题转换成智能化,那么我们的业务离商业智能又迈进的一大步。

说 AI 可能远啦,聊点近的,比如延迟队列的“时间环”算法,ZK的会话分桶算法,限流的令牌桶等,很多偏业务实战方面的落地也可以让我们做得事情充满含金量,换句话说,吹逼层次可以提高了好几个 Level 哈。技术复杂性,还可以是解决多数据源的聚合查询问题,解决数据多写同步以及一致性问题等。抛砖引玉,仅供参考。

业务的复杂性在于:不同业务与业务之前相互作用与干扰。

做过 2B 产品或者项目的小伙伴应该非常理解我所说的含义,因为适配不同企业和商家做定制化需求会导致产品越来越无法通用化,尤其 ERP 这种强业务定制的系统。

那么,为了维护多套类似的逻辑和代码是成本巨大的,因此设计可扩展性的系统尤为重要。很多时候,我们对需求的变化是不可预期的。这种不可预期性恰恰是业务复杂性所在。

事实上,架构设计都是基于当下的设计,一个设计的好坏在于:它是否可以快速地支持业务。换句话说,我设计的系统满足了当前的业务,但是它后期无法可扩展,那么这个设计是好是坏呢?此外,我们根据领域模型作出了良好的设计,但是随着业务的发展,每个模型耦合越来越重。

那么,请思考是领域模型不合理,还是架构设计的不合理,还是业务发展的太快了呢?或者,再思考一个问题。一个公司觉得业务中台的概念很好,也打算落地实践,但是呢,它的业务比较单薄,那么,此时它设计的业务中台具有通用性吗?我个人感觉,不太好说。

事实上,需要不停的业务滋养,只有滋养中才能从最初仅提供单薄业务功能的服务逐渐稳定成一个解决具体问题的业务领域模型。设计模式的有一个模式叫做「模版方法模式」,它的核心思路在于把公共的流程固化下来,把差异点移交给具体的业务方去实现。是吧,只有我们有足够多的业务场景,我们才能沉淀出那些是公共的逻辑,那些是可扩展点,然后在业务设计过程中,我们可以在本业务实现子类做自定义实现,或者提供 SPI 给业务介入方扩展。

总结一下,业务的复杂性在于:不同业务与业务之前相互作用与干扰,以及我们对需求的变化是不可预期性。

你以为我说到这里就结束了吗?当然,不是。我更多的是想引发你的思考以及我们思维的碰撞。例如,很多人抱怨自己是 CRUD 工程师。

我觉得这些人太小看自己的价值了。业务的价值和复杂往往不是 CRUD,而是业务背后的价值思考。线下的业务线上化,传统的东西在线化,那么它就具有结构化存储的能力,可以和其他数据协同,那么,它就有价值。

此外,你是不是可以把 CRUD 的流程自动化,本来一天搞定的东西,你1分钟就搞定了,然后在花59分钟来实现业务差异性。可以了吗,当然不行。你是不是可以把59分钟在压缩压缩,写一个框架,把多分支的问题通过策略模式+工厂模式搞定呀,固化流程通过模版方法模式搞定哈,然后观察者模式、适配器模式、代理模式、责任链模式、状态模式都可以用一用。事实上,很多设计模式是解决复杂业务场景的可扩展经验套路。

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

相关文章

  • 「面试题」介绍你做过最复杂的系统

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

  • Android面试简录——布局

    非技术问题 为什么看好Android? 以前是否从事过Android的工作,做过哪些工作? 你做过的最复杂的界面是...

  • 如何利用互联网月入十万

    今天给大家介绍一下互联网上面的兼职,给你介绍最真实的干货,可能有的你做过了,也有可能有的你没做过,那我今天给大家统...

  • 让你爱上我,是我做过最复杂的事

    文/芩夏 01. 高二分文理班,我进了文科班,进班第一个认识的就是张晓亮。 他坐在我前面,盯着来来往往的女同学,和...

  • 如何让自己成为“架构师”

    架构师是用系统思维解决复杂难题的人。高人=厉害的人=架构师。 一、架构师的成长需要土壤。 背景=你在哪里+你做过什...

  • 系统复杂和复杂系统

    复杂系统 VS 系统复杂 其实说的更清楚点应该是复杂的系统和系统的复杂性。 那么一个系统一环扣一环,是复杂的系统,...

  • 秒杀系统设计总结(持续更新中。。)

    一、前言 秒杀系统其实是一个比较复杂的设计,文章先介绍设计秒杀系统的思路脉络和设计系统的原则。后面章节再详细介绍使...

  • 百度iOS——50道面试题‘总结’(附答案)

    面试题: 一面面试题: HTTP和HTTPS的区别? cao作系统 有哪些cao作系统? 即时系统和非即时系统的区...

  • 一生挚爱

    当我看着你 我在你的眼里 你在我的世界里 我想要的很简单 你不来 我怎敢老去 在复杂的人心与浩瀚的擦肩里 我做过最...

  • 系统设计基础1:垂直扩展和水平扩展

    从本文开始,我们将开始介绍关于系统设计的内容,也就是如何实现一个复杂系统的设计。 首先介绍比较基础的概念:垂直扩展...

网友评论

    本文标题:「面试题」介绍你做过最复杂的系统

    本文链接:https://www.haomeiwen.com/subject/fsyvectx.html