《Springboot揭秘:快速构建微服务》思维导图+文字补充读书笔记

《Springboot揭秘:快速构建微服务》思维导图+笔记

思维导图

《Springboot揭秘:快速构建微服务》思维导图+文字补充读书笔记

文字笔记补充

Springboot微服务

为解决monolith模式下单一容器里web服务难以扩展的问题二衍生出来的解决方案,将相对独立的功能拆分出来作为一个独立项目,从开发到交付完全独立,实现多功能并行开发,实现高效率。
Threads don’t scale,Processes do!
基于JavaEE规范开发的web应用只会导出一个war包并且部署在一个Tomcat容器中,在工程项目逐渐发展膨胀的后期十分不利于扩展开发,因此采用一个Tomcat部署一个war包应用,再复制和扩展多个Tomcat实例是一个比较好的解决方案。
正因为微服务各自独立开发的特性,多语言生态的开发也成为了可能。

Spring框架简单回顾

IOC控制反转:

  1. DI(Dependency Injection)依赖注入:是指当前软件实体被动接受其依赖的其他组件被IOC容器注入。
  2. DL(Dependency Lookup)依赖查找:是指当前软件主动去某个服务注册地查找其以来的那些服务。

SpringIOC依赖注入的流程:

  1. 收集和注册
  2. 分析和组装

这两个流程都有对应的使用XML配置的方式和使用注解的方式,在收集和注册阶段的bean组装对应XML里面的<bean id=xxx …/>,容器自动扫面对应<context:compoent-scan base-package=xxx …/>,注解就对应的@Configuration和@Bean

几个常见的Annotation

  1. @ComponentScan
    对应XML配置里的,可以使用basePackage属性来定制自动扫描范围,如不指定,则会从该注解声明的所在类的package下进行扫描。
  2. @PropertySource@PropertySources
    这两个都用来加载*.properties文件,前者声明一个,后者在低于java8的版本里用来声明多个文件,即在注解声明后的括号里加上前者。
  3. @Import@ImportResources
    用于将多个分开的容器配置合并到一个配置里

嵌入式web容器层面的约定和定制

  1. Springboot默认使用Tomcat的8080端口
  2. 不使用Tomcat的可以把对应依赖改为spring-boot-stater-jetty或spring-boot-starter-undertow
  3. 保留Tomcat但是要更改配置项的,可以通过server.port=接口号,server.address=ip地址,server.ssl.*,server.tomcat.*等

Dubbo和WebAPI都是RPC形式的微服务,Springboot可以做的不止这两种

发布与部署

发布: 指将项目以指定的格式打包成某种可直接交付的形式,比如java类库一般打包成jar包发送到仓库里。如果是可以独立运行的程序,则即可以打包成RPM、DEB等面向特定目标系统的发布形式,也可以将其制作成一个个docker images,然后将制作完成的发布诚聘存储到响应的仓库中
部署: 在发布之后进行,主要职能是将已经发不好的成品从仓库中拿出来,然后分发到目标环境的指定资源帝,并最终启动

软件成品分发的工具和手段:
scp:Linux的远程复制到本地的命令,参考文章: https://www.cnblogs.com/zping/p/5301056.html
rsync:Linux的数据镜像备份工具,参考文章: https://my.oschina.net/ccLlinux/blog/1859116
Chef:自动化服务器配置管理工具,参考文章: https://blog.51cto.com/7308310/2110676, https://blog.****.net/bbwangj/article/details/82185160
Puppet:Linux、Unix、Windows平台的集中配置管理系统,参考文章: https://baike.baidu.com/item/puppet/5109503?fr=aladdin, https://www.cnblogs.com/keerya/p/8040071.html
SaltStack:基于Python开发的一套C/S架构的配置管理工具,参考文章: https://www.cnblogs.com/hackerer/p/6617301.html, https://blog.51cto.com/13558754/2063243
ansible:基于Python开发的自动化运维工具,集合了众多运维工具的优点。参考文章:http://www.ansible.com.cn/, https://blog.****.net/pushiqiang/article/details/78126063