近些年随着云技术的发展,越来越多的用户选择使用云技术来代替传统的IT基础设施。在云技术发展的早期,业界的关注点集中在虚拟化,分布式,存储等laas方面的技术,但是随着“云原生”概念的提出,大家的注意力开始转移到如何构建更适合云环境运行的应用上来。
微服务的概念
微服务的思想是将一个完整的业务,拆分成一个个小型的服务,这些服务有自己的独立的进程,采用更加轻量级的通信协议,每个小型的服务都是一个单独的模块,可以做到独立部署,并且可以采用多种语言以及不同的存储技术,采用这种形式,更方便的进行了服务拆分和服务管理,可以很好的实现高内聚,低耦合
但是微服务并不是可以一劳永逸的解决所有问题,相反,如果不能正确使用微服务,还有可能被微服务自身所限制
- 分布式的代价,在原本的单体应用中,很多简单的问题都会在分布式环境下被几何级的放大,例如分布式事务,分布式锁,远程调用等,不光要考虑如何实现他们,相关场景的异常处理也是必须要考虑到的问题
- 协同代价,例如一个项目上线可能需要发布多个应用,而这些应用又分别由多个团队在维护,协同成本很高
- 微服务的拆分需要很强的设计功力,微服务的各种优势,其中有一个很重要的基础就是对服务领域的正确拆分,如果使用了不合适的切分粒度,或者错误的切分方法,都会让服务不能很好的实现高内聚,低耦合的要求
从Spring到SpringCloud Spring
Spring是一个轻量级的开源框架,从2004年1.0版本的发布开始,因为其灵活易用的特性就受到了整个Java行业的广泛关注,经过十多年的发展,Spring框架早已成为Java语言下编程模型的事实标准,其所倡导的IOC/AOP的概念也早就深入人心,而Spring的“轻量化”是相对于EJB等企业开发框架而言的。其“轻”的特性体现在框架本身很小,早期版本的jar包不超过1MB;同时不依赖运行容器,也就是说任何容器里面都可以运行Spring框架;更重要的是Spring是非入侵的(不会改变原有的代码结构),使用Spring开发的应用可以不完全依赖Spring的类
Spring Boot随着Spring的不断发展,越来越多的组件被集成到了框架中,而Spring框架也从一个小巧精简的IOC容器框架变成了一套大而全的框架集合。开发者为了实现组件的整合工作,往往需要大量的xml文件、java注解中完成各种Bean的配置,这个时候SpringBoot应运而生,使用SpringBoot可以大大简化Spring应用的开发工作,在SpringBoot中无论是官方组件还是第三方框架都会提供各种starter来方便开发者进行依赖和集成。由于采用了约定大于配置的思想,开发者在引入starter以后只需要做少量的配置工作就可以完成框架集成工作,往往开发者只需要很少量的代码就可以实现以前大量配置文件才能做到的功能
同时SpringBoot还是一套面相生产环境设计的框架。配置外化、运行情况检查功能可以很方便的在系统外部实现对系统的管理。同时SpringBoot还是一个运行时容器。通过内嵌Tomcat、Jetty等使得程序的运行不再依赖传统的应用服务器
SpringBoot可以创建独立的Spring应用程序,并且直接内嵌Tomcat,Jetty或者Undertow,所以无需再部署war文件,还提供了“starter”依赖项,以简化构建配置,SpringBoot还会尽可能的自动配置Spring和第三方类库,还提供可以用于生产的功能,例如指标,运行状况检查和外部化配置,并且完全没有代码生成,也不需要xml配置!
Spring CloudSpringCloud是分布式系统中常见的模式,也就是说SpringCloud是针对分布式系统开发所做的通用抽象,是标准模式的实现,SpringCloud更是一个生态圈,它融合了很多技术,提供了分布式微服务系统开发的一站式解决方案,以方便开发者进行分布式开发,是以微服务为核心的分布式系统的一个构建标准
Spring Cloud Alibaba如果说SpringCloud是以微服务为核心的分布式系统的一个构建标准,那么,SpringCloudAlibaba就是针对这个标准的实现,参与这个标准的公司有很多,例如:Google的Spring Cloud GCP、Netflix的Spring Cloud Netflix、Microsoft的Spring Cloud Azure等等,当然还有当前的Spring Cloud Alibaba
图中深色的部分,其实也就是SpringCloud标准,一共有三层,中间最深的部分也就是整合微服务最核心的内容,包括了RPC调用以及服务注册与发现。第二层,也就是围绕核心的一圈,是一些辅助微服务更好的工作功能,包括了负载均衡,路由,网关,断路器,还有分布式追踪等,再外层的话,主要是一些分布式云环境里的通用能力。
最外面的一圈,就是SpringCloudAlibaba对SpringCloud的实现,右上部分是对于SpringCloud标准的实现。例如,通过Dubbo实现了RPC调用功能,通过Nacos实现了服务注册与发现和分布式配置,通过Sentinel实现了断路器等等
工具Java工程脚手架
这里有个网址https://start.aliyun.com/bootstrap.html,是帮助开发者快速生成工程骨架,解决在创建工程时的组件引入、解决版本依赖,基础配置,查询样例代码等繁琐问题
但是如果我有时间的话,我是不会用的,因为随着现在的技术发展的飞快,开发工作也慢慢变得简单,有时候只需要加个注解,甚至点点鼠标就可以完成,这也意味着,我们离底层越来越远了,也就是排错能力越来越弱了,我真心希望自己可以成为一个开发工程师,而不是一个API调用工程师,有句话说得好:CRUD虽然简单,但是却是一切业务的根本!!!一起加油成为更好的自己,共勉!



