欢迎来到啾啾的博客,一个致力于构建完善的Java程序员知识体系的博客,记录学习的点滴,分享工作的思考、实用的技巧,偶尔分享一些杂谈。
欢迎评论交流,感谢您的阅读。
在微服务设计和接口设计中,我们有了解到。
微服务设计需关注服务协作、合理划分(如业务边界)、职责单一、高可用性、独立部署、故障隔离、容错机制等核心维度,追求协作工作小而自洽。[微服务设计]1_微服务-CSDN博客
接口设计需要考虑到安全性、稳定性、可靠性、可拓展性、可维护性、一致性、高性能设计等方面,追求稳定且全面。[代码规范]接口设计规范_接口设计方案-CSDN博客
那么,什么是分布式系统呢?分布式系统设计我们需要考虑的有哪些呢?
分布式系统定义上是“分布式系统通过软件抽象和网络连接,将分散的计算资源整合为一个协同工作的整体,旨在解决单机系统在规模、性能、容错性等方面的局限,是现代云计算、大数据和互联网服务的技术基础。”。
这里提供一个方向去理解分布式系统——从微服务开始了解。微服务定义是协同工作小而自洽,这种自洽带来了服务的极大自由,可是从系统设计的宏观角度来说,这个微服务用这套技术,那个微服务用那套技术,这种没有约束的自由带来了系统治理的混乱。
为了解决这种混乱,往往需要从架构层面,对架构中的服务进行统一约束,也就是规范约定、做微服务架构设计,这种微服务架构是分布式系统的一种实现方式。
分布式系统还有其他架构模式,这里不做论述。
分布式系统设计是一个复杂的工程,需要考虑多个方面,包括但不限于服务架构的演进、远程服务调用、事务处理、流量治理、可观测性、数据一致性等等等。
宏观的来说,需要权衡各个方面的CAP,在一致性、可用性、分区容忍性之间选择优先级。
原则上来说,还是低耦合、高内聚、遵从大多架构设计说明的渐进式扩展、最小化复杂度等等。
保持接口和实现的简单些,比系统的任何其他属性,包括准确性、一致性和完整性,都来得更加重要。
某个功能能够进行分布式,并不意味着它就应该进行分布式,强行追求透明的分布式操作,只会自寻苦果。
尽管目光所及之处,只是不远的前方,即使如此,依然可以看到那里有许多值得去完成的工作在等待我们。
在《凤凰架构:构建可靠的大型分布式系统》一书中有提到“无服务”是服务架构的一种发展趋势,其“无服务时代”的论述如下:
"人们研究分布式架构,最初是因为单台机器的性能无法满足系统的运行需求,尽管在后来架构演进过程中,容错能力、技术异构、职责划分等各方面因素都成为架构需要考虑的问题,但获得更好的性能在架构设计需求中依然占很大的比重。对软件研发而言,不去做分布式无疑是最简单的,如果单台服务器的性能可以是无限的,那架构演进的结果肯定会与今天有很大差别,分布式也好,容器化也好,微服务也好,恐怕都未必会如期出现,最起码一定不是今天这个样子。
绝对意义上的无限性能必然是不存在的,但在云计算落地已有十余年的今天,相对意义的无限性能已经成为现实。"
从目前的招聘市场和企业应用来看,云计算确实是大势所趋,且结合云厂商与AI的发展来看,书中提到的“只需要关注业务,不需要考虑技术组件,不需要关注分布式架构与系统技术”正在加速实现。
Q:继续学习微服务架构是不是一个边际的提升,普通Java程序员是不是应该专向AI?
这个疑问来自于上面的学习总结,AI时代,给自己定下的发展方向是“Java核心能力为盾,AI为矛”,主Java,辅AI。但是,在了解到“无服务时代”的趋势与“AI融合”之后,感觉正在做很边际的事情。
A:调整方向为“Java核心能力为盾,AI\云原生为矛”
关于架构和系统方面的学习不再是传统的架构,而是“AI系统架构师”、“云原生架构师”。
A:要加快学习了,要投入更多的时间,掌握更多的方法论。