前世今生

Java诞生于90年代,凭借面向对象、跨平台、GUI、无需手动控制内存回收等优势,简单一上手早就全球Javaer人群众多

凭借​​Pivotal​​​推出​​Spring​​​、​​SpringBoot​​​框架,Javaer则在业务层面享受到了简单快捷、易扩展等特性。让其他语言的开发者羡慕,​​Spring​​思想也给其他语言框架开发借鉴。

SOA(服务治理)

当企业规模不断扩大,分散在各个团队组织中大量应用服务交互没有标准化、没有统一监控治理,支离破碎的、混乱不堪的服务为未来的开发埋下大量风险。

这时候​​SOA​​​横空出世,满足企业标准化、集中化管理的诉求,大量企业纷纷更新改造,为​​Javaer​​​带来了大量重构工作,也为业务开发为主的​​Javaer​​​积累了系统架构知识,在前后端没分离的以前,中小公司​​Javaer​​后端人员对业务、前端、后端、运维全部参与,现今很多架构师主要是后端开发出身。

​ESB​​​总线基于​​SOA​​​架构更进一步扩展,使用​​WebService​​​、​​XML​​​、​​Web​​服务等技术开发。它是所有应用的总线,集中化管理和简化应用之间的集成,以多种的开放协议(协议转换)标准为基础来支持应用之间通过消息、事件和服务级别上动态的交互,是一种在松散耦合的服务和应用之间标准的集成方式。

微服务春风

​SOA​​​虽然解决服务治理,但是中心化的缺陷,所有服务必须接入​​ESB​​总线,单点故障,性能差。

​Martin Fowler​​​提出了​​微服务​​​的概念,大型单体维护地狱,发布测试困难,扩展性差,​​微服务​​提出了设想,但对于微服务怎么划分却没有给出明显的边界,这不要紧实践出真理。

微服务以轻量的​​Http​​协议,跨语言,松耦合,强调独立,提供统一注册发现、熔断限流、网关、认证授权等基础设施,但这对于中小型公司来说,开发成本太大。

​Netflix​​​就实践出自己一套方法论,再加上​​Spring Cloud​​​积极维护,微服务成为一套银弹,遍地开花,面试必问微服务,​​Javaer​​掌控雷电。

但是微服务拆到那个粒度,服务之间怎么交互,数据一致性怎么保证,还是没找到一套方法论,但是部分公司服务拆的太细,团队没拆,服务拆分先行,服务之间存在关联,又引入​​BFF​​​聚合服务层,​​DDD​​​被翻出来当做服务拆分银弹,​​DDD​​​明确了领域的边界,边界交互的方式,子领域聚合根,那就以此来划分,以此领域事件来通信?相信完全落地​​DDD​​还是少数,作为企业项目稳定,技术也是演进式的,太激进的技术对于企业还是开发来说成本太高、试错风险太大。

不考虑场景,提出解决方法是不负责任的,微服务不是银弹

大中台战略

阿里提出​​大中台战略​​,其实在企业内部技术部门已经服务化,独立无耦合已经拆分,这个中台战略是要跨部门组织协调,企业内部不同团队负责的业务线不同,业务模式也不同,这要强行中台化,我觉得是两级化理解了上层的意思,所谓的复用,是有前提,业务模式一样的,多部门利益是一致的。

虽然阿里业务部门的中台化无法借鉴,但是对于数据、技术领域的中台化确实可以落地的,毕竟企业内部技术栈、软件开发的流程都差不多。

时代宠儿-云原生

​OpenStack​​​标准化困难、部署复杂,被很多企业诟病 ​​Docker​​​就像​​Spring​​​干掉了​​EJB​​​,年迈的老者面对年轻人,只能暗骂年轻人不讲武德。​​Docker​​​的简单和留下也让它成为事实上的容器标准,但是​​Docker​​​没有对多机统一管理、交互的方法,之后​​Docker Swarm​​​的强硬也让云大厂抛弃​​Docker​​​,反而拥抱​​Google​​​开源的​​kubernetes​​​产品,​​Google​​赢得了胜利果实,是容器顶层标准制定者。

有了物理机虚拟化、多机多数据中心基础设施,企业技术中台落地事半功倍,​​Javaer​​从运维中释放出来,只要完成镜像的制作,工作就完成了。

像​​SpringCloud​​​的API网关,熔断、限流、东西向流量、服务注册发现还是在应用层做,尽管一般以​​SDK​​​或​​Agent​​​探针接入,但是事实上对于代码上还是有侵入,而且​​SpringCloud​​​体系只对​​Javaer​​友好,企业内部其他语言需要自己自研。

​Service Mesh​​​统一接管微服务基础设施,在平台层做统一处理,屏蔽底层应用差异,让其他语言开发者也能享受服务网格的利好,企业招聘也可以更加多样化,开发不局限于语言,再合适的场景引入适合技术栈。但​​Mesh​​本身对性能有一定的影响,需要根据场景定制化,多一层代理,对性能损耗是必然,要看业务容忍度。

​Javaer​​​突然发现以前靠着微服务的雷电不管用,统一被平台接管,​​Javaer​​​在架构上能做的事情已经不多,​​Java​​​出了​​JDK17​​​还是没解决协程,​​ZGC​​生产应用有待考证。

​Java​​​两个未来发展方向,​​Loom​​​协程和​​graalvm​​​,但是这些都对业务开发来说并不能成为竞争力,毕竟面试并不考业务,可以发力一地方就是在协程难产时,掌握​​Reactor​​​编程技巧,但是部分开源框架对其支持落后,改变编程模型有一点难度,腾讯和阿里的​​JDK​​​都支持了无侵入协程,在​​JVM​​层面优化部分阻塞代码。

函数即是正义 - FaaS

前面​​graalvm​​​语言是不懂的,二进制才原汁原味,减少沟通成本,参考类似于​​DAG​​​流程编排,事件驱动,函数化,​​SpringBoot​​太重了!

自宫 - 低代码平台

有幸接触用过一段时间低代码平台,统一标准,抽象业务模型,元数据管理,区分推拉,如果业务足够简单,不需要写代码,以后不会再存在开发和产品对立、撕逼场面了,产品经理就是设计和开发,通过设计来解决简化复杂业务

八股文,内卷

在面试这个事情上,在国内人供过于求背景下,产业转型缓慢,高新技术岗位缺乏,一旦有高薪行业,大量人涌入,不断降低行业人员红利,蓝海瞬间红海。

在经济下行周期中,企业岗位不再新增岗位,甚至减少岗位,从业人员不变的情况,​​211/985​​硕士以前想都不敢想,企业现在还可以挑着选。

八股文、LeeCode应运而生,​​Javaer​​​作为业务开发,在工作不可能想做什么就做什么,你能力行企业不会允许,稳定大于一切,学历和面试题不过是为了减少面试者,企业管理员不能花那么多时间对所有面试一个个面试,一刀切是无奈之举,这是对面试者和面试官的双刃剑,因为行业一旦发展恶性循环,你处于旋涡中,必然要被卷入,跟着内卷,跟着八股文,成为受害者。下班之后照着书抄着无意义的博客,​​Copy​​​别人代码仓库改下包名的开源,无意义的工作并不会增加产出,但会挤压你的空余时间,毕竟​​996​​的开源都不可持续的,希望大家能共同维护好环境。