微服务的系统架构,面试常问到的

整套开发技术栈以 SpringCloud 为主,单个微服务模块以 SpringMVC+SpringBoot/Spring+MyBatis 组合进行开发

1、前端层

页面 H5+thymeleaf/样式CSS3+Bootstrap/前端框架JQuery+Node|Vue等

2、负载层

前端访问通过Http或Https协议到达服务端的LB,可以使用 Nginx 实现反向代理、动静分离、负载均衡, LVS 来实现负载均衡,Keepalived 实现HA,也可以使用是F5等硬件做负载均衡。

2.1 CDN + Varnish 服务器

对于不变动的 图片 、JS文件、静态页面等可以放到 CDN 、Varnish 服务器上。

3、网关层

请求通过LB (负载均衡 load balance)后,会到达整个微服务体系的网关层Zuul(Gateway),内嵌 Ribbon 做客户端负载均衡,Hystrix 做熔断降级等

4、服务注册

采用 Eureka 来做服务治理,Zuul 会从 Eureka 集群获取已发布的微服务访问地址,然后根据配置把请求代理到相应的微服务去

5、docker容器

所有的微服务模块都部署在 Docker 容器里面,而且前后端的服务完全分开,各自独立部署后前端微服务调用后端微服务,后端微服务之间会有相互调用

6、服务调用,

微服务模块间调用都采用标准的 Http/Https+REST+JSON 的方式,调用技术采用 Feign+HttpClient+Ribbon+Hystrix

7、统一配置

每个微服务模块会跟 Eureka 集群、配置中心(SpringCloud Config)等进行交互。

8、第3方框架

每个微服务模块根据实现的需要,通常还需要使用一些第三发框架,比如常见的有:缓存服务(Redis)、图片服务(FastDFS)、搜索服务(ElasticSearch)、安全管理(Shiro)等等

8.1、 redis

使用Codis 的解决方案 实现 redis 的HA、高性能。

8.2、 ElasticSearch

9、Mysql 数据库

Mysql数据库可以按照微服务模块进行拆分,统一访问公共库或者单独自己库,可以单独构建MySQL集群 或者 分库 分表 MyCat等

你可能感兴趣的:(分布式,#,spring,cloud,#,Spring,Boot,面试)