软件架构设计本身就是一个复杂的事情,但其实业界已有一个共识,那就是“通过组件化完成关注点的分离从而降低局部复杂度”。其实现在我们用的无论是容器、中间件、消息、数据库等,在某种意义上都是组件化的产物。这样的好处是在不同的系统里可以复用。在云原生兴起的今天,以通用的、组件化的服务形式更容易为我们所用,所以说现在如果还不享用云原生技术红利,那你就会被时代抛弃。
软件是以持续迭代的方式去不断演进的。某种程度上,我们并不担心软件不完善,但担心软件的迭代速度太慢而影响了完善的速度。在分布式软件领域,如何快速、安全地验证新的软件版本一直是大家所关心并探索的。服务网格(Service Mesh)的出现将这个领域的探索推向了新的高度。“泳道”这一概念在分布式软件领域并非新词,只不过,这次我们是以服务网格为基础技术去构建,充分发挥云原生技术天然具备灵活治理流量的优势。
读 A Philosophy of Software Design 有感,软件设计与架构复杂度,你是战术龙卷风吗?
我们可以列举出非常多质量差的代码的表现现象,如名字不知所意、超大类、超大方法、重复代码、代码难懂、代码修改困难……其中最为影响代码质量的两个表现是命名名不副实、逻辑可扩展性差,当一个新人阅读代码时,有时发现方法命名与实际逻辑对不上,这就让人感到非常疑惑,这种现象在平时工作并不少见;另一个就是逻辑扩展性差,一个新业务需求提出来后,发现要在多处改动,需要回归的业务逻辑比较多,造成研发效率不高。
随着全球大数据不断增长,未来数据云存储容量需求也将不断扩大,iiMedia Research(艾媒咨询)数据显示,2020 年全球数据中心存储容量将达到 272 艾字节。不断扩大的个人数据和云储存需求加速了个人云服务市场的发展,2020 年中国个人云盘用户规模有超过 4 亿人。 虽然现在市面上有些网盘产品, 如果免费试用,或多或少都存在一些问题, 可以参考文章《2020 国内还能用的网盘推荐》。本文旨在使用较低成本打造一个 “个人专享的、无任何限速的、如 Windows 体验的私有云盘”。
1. 从抽象的工程设计论角度阐述了如何写好一份代码。阐述了设计模式和设计原则的底层原理。 2. 解释了设计模式与设计原则适用的场景及局限性。工程设计论是在有限设计能力下对被设计对象进行的认知和进行逆运算的过程。在不符合这一条件的领域,不应当死扣设计模式与设计原则。在软件领域,一个显而易见的例子就是不要在极度追求性能的代码中死扣设计模式与设计原则。 3. 解释了设计原则中的单一职责原则为何难以掌握和运用。 4. 面向接口设计是软件系统设计的最终形态,对开发流程中先写单例再开发的原因做了解释。
当前,云原生技术以容器技术为基础,通过标准可扩展的调度、网络、存储、容器运行时接口来提供基础设施。同时,通过标准可扩展的声明式资源和控制器来提供运维能力,两层标准化推动了开发与运维关注点分离,各领域进一步提升规模化和专业化,达到成本、效率、稳定性的全面优化。 在这样的大技术背景下,越来越多的公司引入了云原生技术来开发、运维业务应用。正因为云原生技术带来了越发纷繁复杂的可能性,业务应用出现了微服务众多、多语言开发、多通信协议的鲜明特征。同时,云原生技术本身将复杂度下移,给可观测性带来了更多挑战:
相较于大家熟练使用的 MVC 分层架构,领域驱动设计更适用于复杂业务系统和需要持续迭代的软件系统的架构模型。关于领域驱动设计的概念及优势,可以参考的文献非常多,大多数的同学都看过相关的书籍,所以本文不讨论领域驱动概念层面的东西,而是试图从编程实践的层面,对领域驱动开发做一些简单的介绍。