Skip to content

Commit 7a595fd

Browse files
authored
Merge pull request #27 from smarthadron/master
new release
2 parents e51a1c3 + 13a4eff commit 7a595fd

10 files changed

Lines changed: 174 additions & 9 deletions

CHANGELOG.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
# [云框架]基于Spring Cloud的微服务架构
1+
# [云框架]基于Spring Cloud的微服务架构
2+
3+
## v1.5 (2017.05.24)
4+
5+
+ `生产环境` 增加K8s部署
6+
7+
+ `生产环境` 增加配置中心高可用、服务注册发现机制、服务容错机制、日志采集、监控体系
8+
9+
+ `生产环境` 增加性能优化
210

311
## v1.0 (2017.05.10)
412

README.md

Lines changed: 165 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -297,11 +297,169 @@ Feign同时可以引用注册中心以外的服务没,例如在统计服务模
297297

298298
# <a name="生产环境"></a>生产环境
299299

300-
* `TODO` CI/CD
301-
* `TODO` 扩容
302-
* `TODO` 服务容错
303-
* `TODO` 业务监控/性能分析
304-
* `TODO` K8s部署
300+
生产环境中的应用服务需要满足以下基本特征:
301+
302+
  1. 部分软件、硬件或网络异常后,应用依然能够可靠工作
303+
304+
  2. 多用户支持下应用继续工作
305+
306+
  3. 可添加或删除资源来适应不同需求变化
307+
308+
  4. 便于部署和监控
309+
310+
换句话说,在生产环境下,我们需要考虑更多、更复杂的因素以满足实际业务及支持业务的特性。
311+
312+
对于微服务架构,推荐使用`Docker`+`Kubernetes`PaaS平台搭建,合理结构如下:
313+
314+
<div align=center><img width="900" height="" src="./image/生产环境搭建整体结构.png"/></div>
315+
316+
[为什么使用Docker?](https://yeasy.gitbooks.io/docker_practice/content/introduction/why.html)
317+
318+
[为什么使用Kubernetes?](https://blog.gcp.expert/kubernetes-gke-introduction/)
319+
320+
[Container, Docker, and Kubernetes](https://collectiveidea.com/blog/archives/2017/01/27/containers-docker-and-kubernetes-part-1)
321+
322+
## 安装Kubernetes
323+
324+
Kubernetes提供了多种详尽的安装方式,此处不再赘述,建议参考:
325+
326+
* [Kubernetes官方文档:Picking the Right Solution](https://kubernetes.io/docs/setup/pick-right-solution/)
327+
328+
* [Kubernetes學習筆記](https://gcpug-tw.gitbooks.io/kuberbetes-in-action/content/)
329+
330+
## 部署应用至Kubernetes
331+
332+
服务编排(Service Orchestration)是**设计、创建和提供端到端服务的过程**,常常出现在面向服务架构、虚拟化、配置、融合基础架构、动态数据中心等等相关内容中,目前最流行的服务编排工具非Kubernetes(K8s)莫属。
333+
334+
Kubernetes将组成应用的容器组合为逻辑单元,以便于管理和发现。它的功能十分完善,提供包括资源调度、服务发现、运行监控、扩容缩容、负载均衡、灰度升级、失败冗余、容灾恢复、DevOps等一系列选项,帮助实现大规模、分布式、高可用的Docker集群,为解决业务的分布式架构、服务化设计,完整定义了构建业务系统的标准化架构层,即Cluster、Node、Pod、Label等一系列的抽象都是定义好的,为服务编排提供了一个简单、轻量级的方式。[Kubernetes: a platform for automating deployment, scaling, and operations](https://www.slideshare.net/BrianGrant11/wso2con-us-2015-kubernetes-a-platform-for-automating-deployment-scaling-and-operations)
335+
336+
在部署应用至Kubernetes之前,我们需要对应用的生命周期有一定了解。
337+
338+
<div align=center><img width="900" height="" src="./image/应用生命周期.png"/></div>
339+
340+
* 使用Git进行代码版本管理(重点在于Git是分布式,[Git vs SVN](http://stackoverflow.com/questions/871/why-is-git-better-than-subversion)
341+
342+
* 明确服务的构建规则
343+
344+
* 采用Image或Binary应用包管理
345+
346+
* 制定包括开发、测试、生产及审核在内的服务部署规则
347+
348+
* 根据实际业务需求选择适合的发布机制([灰度发布、AB测试、蓝绿部署、金丝雀部署](http://blog.christianposta.com/deploy/blue-green-deployments-a-b-testing-and-canary-releases/)
349+
350+
**部署PiggyMetrics至Kubernetes**
351+
352+
[查看PiggyMetrics应用结构图](./image/piggymetrics应用结构图.png)
353+
354+
[查看PiggyMetrics完整Yaml文件](https://github.com/cloudframeworks-springcloud/user-guide-springcloud/tree/master/yaml)
355+
356+
**步骤:**
357+
358+
1. 安装Kubernetes、Docker环境
359+
360+
2. 创建命名空间
361+
362+
   ```
363+
kubectl -s 127.0.0.1:8080 create namespace springcloud
364+
   ```
365+
366+
3. 创建服务
367+
368+
   ```
369+
kubectl -s 127.0.0.1:8080 create -f service.yaml文件 --namespace=springcloud
370+
   ```
371+
372+
4. 创建应用部署
373+
374+
   ```
375+
kubectl -s 127.0.0.1:8080 create -f deployment.yaml文件 --namespace=springcloud
376+
   ```
377+
378+
备注:
379+
127.0.0.1:8080----kubernetes
380+
service.yaml文件----svc文件
381+
deployment.yaml文件----deployment文件
382+
383+
## 功能特性实现
384+
385+
### 配置中心高可用
386+
387+
在生产环境中服务从配置中心读取文件,而配置中心从Gitlab读取配置文件,将配置中心做成一个集群化微服务即可实现高可用,满足大量服务的需求。
388+
389+
结构图如下:
390+
391+
<div align=center><img width="900" height="" src="./image/配置中心高可用部署图.png"/></div>
392+
393+
### 服务注册发现机制
394+
395+
在生产环境中服务注册发现管理采用Eureka Server进行,并**采用3个对等节点进行两两注册以实现高可用**
396+
397+
结构图如下:
398+
399+
<div align=center><img width="900" height="" src="./image/注册服务发现机制.png"/></div>
400+
401+
### 服务容错机制
402+
403+
通过Hystrix进行熔断处理,同时通过Hystrix Dashboard实现图形化展示,并**加入RabbitMQ使其由默认的主动“拉”的方式,变为通过MQ消息队列进行“推”的模式**,以保证简单结构和实时效率。
404+
405+
结构如下图所示:
406+
407+
<div align=center><img width="900" height="" src="./image/springcloud服务容错机制.png"/></div>
408+
409+
### 日志采集
410+
411+
在生产环境中通过**EFKA**(elasticsearch fluentd kibana kafka)进行日志收集和展示。
412+
413+
结构如下图所示:
414+
415+
<div align=center><img width="900" height="" src="./image/springcloud日志采集.png"/></div>
416+
417+
### 监控体系
418+
419+
通过实时的日志收集系统获取日志信息,并利用时间窗口的技术进行日志分析。
420+
421+
结构如下图所示:
422+
423+
<div align=center><img width="900" height="" src="./image/springcloud监控体系.png"/></div>
424+
425+
## Spring Cloud性能优化
426+
427+
1、注册中心配置优化
428+
429+
eureka:
430+
instance:
431+
prefer-ip-address: true
432+
client:
433+
registerWithEureka: false
434+
fetchRegistry: false
435+
server:
436+
waitTimeInMsWhenSyncEmpty: 0
437+
server
438+
eviction-interval-timer-in-ms: 4000
439+
enableSelfPreservation: false
440+
renewalPercentThreshold: 0.9
441+
442+
2、zuul配置优化
443+
444+
ribbon:
445+
ReadTimeout: 20000
446+
ConnectTimeout: 20000
447+
MaxAutoRetries: 1
448+
449+
zuul:
450+
host:
451+
connect-timeout-millis: 20000
452+
socket-timeout-millis: 20000
453+
454+
3、Feign配置
455+
456+
#请求和响应GZIP压缩支持
457+
feign.compression.request.enabled=true
458+
feign.compression.response.enabled=true
459+
#支持压缩的mime types
460+
feign.compression.request.enabled=true
461+
feign.compression.request.mime-types=text/xml,application/xml,application/json
462+
feign.compression.request.min-request-size=2048
305463

306464
# <a name="常见问题"></a>常见问题
307465

@@ -310,9 +468,8 @@ Feign同时可以引用注册中心以外的服务没,例如在统计服务模
310468
# <a name="更新计划"></a>更新计划
311469

312470
* `文档` 增加在线演示
313-
* `组件` 增加组件内容,如Spring Cloud Sleuth、Spring Cloud Consul等
314-
* `生产环境` 增加生产环境下各项扩展操作,如性能测试及各类部署、特性、技术实现等
315-
* `快速部署` 增加好雨云帮部署
471+
* `文档` 增加&完善文档外链
472+
* `组件` 单个组件深入
316473
* `常见问题` 问题汇总
317474

318475
点击查看[历史更新](CHANGELOG.md)
197 KB
Loading

image/springcloud日志采集.png

113 KB
Loading
104 KB
Loading

image/springcloud监控体系.png

64 KB
Loading

image/应用生命周期.png

115 KB
Loading

image/注册服务发现机制.png

38.9 KB
Loading
79.3 KB
Loading
41.3 KB
Loading

0 commit comments

Comments
 (0)