一、引言
Last updated
Last updated
针对主流微服务技术相关技术kong 网关 、 Spring Cloud 、ServiceComb 、docker 、kubernets 等技术总结和整套学习路线推荐。同时推荐每个关键步骤可以选择的技术点,方便用于后期项目、产品研发使用。理解这里面介绍的项目思想是最首要的。
首先要说明的是微服务是一种架构思想,跟语言无关。所以不要说微服务=spring cloud, spring cloud只是基于微服务思想,然后用java进行复写出来。其实spring cloud 有局限性,因为他只能用java语言进行开发。实际上微服务思想中更多是希望兼容来自不同语言的异构系统。
因为16年底接手云监控产品,这个产品当时在技术选型上选择了微服务架构去扭转整个业务数据。当时参考了What are microservices?整片文章中的思想,同时结合了当时公司人员的技术安排,java、php、reactjs、python、go 各个语言都有负责人员,也非常契合文章中所提到的微服务的架子,于是大胆选择了Kong作为微服务的网关来整合不同语言的异构特性。大致项目结构如下图所示:
产品通过探针采集数据(datadog、snmp、vcenter/kvm、iot等)丢到整个Golang 的代理层中进行数据处理和归并统一,然后丢到KONG网关中进行数据的扭转,分发到不同的业务数据系统中(php、java),最后丢到队列中进行数据的存储介质中opentsdb 、mysql、es、redis。项目预览:
因为整个项目依赖探针数据,同时整套系统不存在事务处理,更多是依赖数据传输和展示。所以选择Kong API 网关作为整个数据的网关中间件。在网关中进行所有后台(php、java)的逻辑api。【其实如果项目不是那么复杂,而且前后端分离通过类似JWT做token验证的话,这个方案真的不错!】
项目涉及到语言go、java、php、reactjs、python语言是非常考验团队整体的技术能力的。同时项目整体庞大,涉及到的中间件繁多,整体架构异构特别多,最终导致项目部署、维护、运维各个方面,非常麻烦(即使使用了docker容器技术等)!如果人员离职等因素,最后整个项目导致了瘫痪状态。
建议特别是大型web项目中,使用微服务是比较合理方便的,特别还不涉及到数据库事务的时候更是如此(当然存在事务也有办法)。这里针对后台语言来说我这里推荐golang + java 来做整体的语言选择,golang去做底层数据处理、网络io等,java去处理业务数据。
后续结合自己这段时间微服务学习走过的坑进行总结,并且告知后期使用哪些技术手段来进行开发。