前世今生
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
的开源都不可持续的,希望大家能共同维护好环境。