[分布式系统]1_分布式系统概述与杂谈

欢迎来到啾啾的博客,一个致力于构建完善的Java程序员知识体系的博客,记录学习的点滴,分享工作的思考、实用的技巧,偶尔分享一些杂谈。
欢迎评论交流,感谢您的阅读。

设计的特性

在微服务设计和接口设计中,我们有了解到。

微服务设计需关注服务协作、合理划分(如业务边界)、职责单一、高可用性、独立部署、故障隔离、容错机制等核心维度,追求协作工作小而自洽。[微服务设计]1_微服务-CSDN博客

接口设计需要考虑到安全性、稳定性、可靠性、可拓展性、可维护性、一致性、高性能设计等方面,追求稳定且全面。[代码规范]接口设计规范_接口设计方案-CSDN博客

那么,什么是分布式系统呢?分布式系统设计我们需要考虑的有哪些呢?

分布式系统定义上是“分布式系统通过软件抽象和网络连接,将分散的计算资源整合为一个协同工作的整体,旨在解决单机系统在规模、性能、容错性等方面的局限,是现代云计算、大数据和互联网服务的技术基础。”。

这里提供一个方向去理解分布式系统——从微服务开始了解。微服务定义是协同工作小而自洽,这种自洽带来了服务的极大自由,可是从系统设计的宏观角度来说,这个微服务用这套技术,那个微服务用那套技术,这种没有约束的自由带来了系统治理的混乱。

为了解决这种混乱,往往需要从架构层面,对架构中的服务进行统一约束,也就是规范约定、做微服务架构设计,这种微服务架构是分布式系统的一种实现方式。

分布式系统还有其他架构模式,这里不做论述。

分布式系统设计是一个复杂的工程,需要考虑多个方面,包括但不限于服务架构的演进、远程服务调用、事务处理、流量治理、可观测性、数据一致性等等等。

宏观的来说,需要权衡各个方面的CAP,在一致性、可用性、分区容忍性之间选择优先级。

原则上来说,还是低耦合、高内聚、遵从大多架构设计说明的渐进式扩展、最小化复杂度等等。

一些分布式设计哲学

保持接口和实现的简单些,比系统的任何其他属性,包括准确性、一致性和完整性,都来得更加重要。

某个功能能够进行分布式,并不意味着它就应该进行分布式,强行追求透明的分布式操作,只会自寻苦果。

尽管目光所及之处,只是不远的前方,即使如此,依然可以看到那里有许多值得去完成的工作在等待我们。

AI时代的无服务

在《凤凰架构:构建可靠的大型分布式系统》一书中有提到“无服务”是服务架构的一种发展趋势,其“无服务时代”的论述如下:

"人们研究分布式架构,最初是因为单台机器的性能无法满足系统的运行需求,尽管在后来架构演进过程中,容错能力、技术异构、职责划分等各方面因素都成为架构需要考虑的问题,但获得更好的性能在架构设计需求中依然占很大的比重。对软件研发而言,不去做分布式无疑是最简单的,如果单台服务器的性能可以是无限的,那架构演进的结果肯定会与今天有很大差别,分布式也好,容器化也好,微服务也好,恐怕都未必会如期出现,最起码一定不是今天这个样子。

绝对意义上的无限性能必然是不存在的,但在云计算落地已有十余年的今天,相对意义的无限性能已经成为现实。"

从目前的招聘市场和企业应用来看,云计算确实是大势所趋,且结合云厂商与AI的发展来看,书中提到的“只需要关注业务,不需要考虑技术组件,不需要关注分布式架构与系统技术”正在加速实现。

杂谈

Q:继续学习微服务架构是不是一个边际的提升,普通Java程序员是不是应该专向AI?

这个疑问来自于上面的学习总结,AI时代,给自己定下的发展方向是“Java核心能力为盾,AI为矛”,主Java,辅AI。但是,在了解到“无服务时代”的趋势与“AI融合”之后,感觉正在做很边际的事情。

A:调整方向为“Java核心能力为盾,AI\云原生为矛”

关于架构和系统方面的学习不再是传统的架构,而是“AI系统架构师”、“云原生架构师”。

A:要加快学习了,要投入更多的时间,掌握更多的方法论。

你可能感兴趣的:(#,设计概论,微服务,分布式,java)