@@ -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 )
0 commit comments