一、微服务
1.1 单体应用和微服务的区别
二、Spring Boot
三、Docker
-
mesos
-
K8S
核心:
- 依赖
- 轻量级环境
3.1 Docker(可以当成虚拟机,但不是虚拟机)
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
持续集成(Continuous integration)(简称:CI)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
持续部署(continuous deployment)(简称:CD)是通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器,投资机器优化开发流程化相对也提高了人的效率,让 engineering productivity 最大化。
(1)配置Dockerfile构建镜像,实现容器化
镜像:静态文件,本身不运行
容器:(进程)
Dockerfile:如何构建镜像的规范文件(hub:直接起来,快速,也可以快速回退)
CI:
(2)docker容器都是基于Linux内核操作的
(3)Docker镜像仓库
(4)K8S(Kubernetes)编排
k8s是什么
云原生应用(K8S=云原生应用的操作系统)
- 应用的伸缩
集群便可以利用监控指标(cpu使用率等)自动的扩容或者缩容服务中Pod数量,当业务需求增加时,系统将为您无缝地自动增加适量容器 ,提高系统稳定性 - 容错(鲁棒)
自动鼓励服务器,假如有一台机器死机,系统会自动分配一台服务器重新运行 - 持续发布(灰度发布、不停机发布)
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
系统更新,先关闭1台服务器更新,更新完成后再更新另一台,不用停机更新
(5) 了解Docker和K8S
四、Spring Clound
核心
- 注册
- 发现
- 负载均衡
- feign(Spring Cloud Ribbon和Spring Cloud Hystrix)
config 、配置中心 ,比较鸡肋,一般不用
4.1 Eureka服务注册与发现
Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务治理可以说是微服务架构中最为核心和基础的模块,他主要用来实现各个微服务实例的自动化注册与发现。
服务注册:在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号、版本号、通信协议等一些附加信息告知注册中心,注册中心按照服务名分类组织服务清单,服务注册中心还需要以心跳的方式去监控清单中的服务是否可用,若不可用需要从服务清单中剔除,达到排除故障服务的效果。
服务发现:由于在服务治理框架下运行,服务间的调用不再通过指定具体的实例地址来实现,而是通过向服务名发起请求调用实现。
Spring Cloud Eureka 使用 Netflix Eureka 来实现服务注册与发现,即包括了服务端组件,也包含了客户端组件,并且服务端和客户端均采用 Java 编写,所以 Eureka 主要适用与通过 Java 实现的分布式系统,或是与 JVM 兼容语言构建的系统,但是,由于 Eureka 服务端的服务治理机制提供了完备的 RESTful API,所以他也支持将非 Java 语言构建的微服务纳入 Eureka 的服务治理体系中来。
标准:目前使用“Eureka 1.x”(“Eureka 2.x”设计的太过超前,不能使用)!
相同服务:
- Eureka(采用java开发)
- Zookeeper(采用java开发)
- Consul(consul采用golang开发)
- etcd(K8S应用etcd实现)
4.2 服务器端负载均衡和客户端负载均衡的区别?
服务器端负载均衡:例如Nginx,通过Nginx进行负载均衡,先发送请求,然后通过负载均衡算法,在多个服务器之间选择一个进行访问;即在服务器端再进行负载均衡算法分配。
客户端负载均衡:例如spring cloud中的ribbon,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,这是客户端负载均衡;即在客户端就进行负载均衡算法分配。
4.3 架构
- 应用架构
- 系统架构
4.4 ELk日志分析系统
- ELk:存日志,分析,网络存储
- ceph:存储到磁盘文件,效率低,块存储
- fastdfs:文件
- mysql:结构数据