系统架构设计是系统构建过程中的非常关键的一部分,决定着系统的稳定性、鲁棒性、扩展性等一系列问题,定义了在系统内部,如何根据技术、业务和组织及可扩展性、可维护性和灵活性等一系列因素,把系统划分成不同的组成部件,并使这些部件相互协作为用户提供某种特定的服务。不过伴随着业务的不断发展,功能的持续增加,传统单块架构对应的沟通、管理、协调等成本越来越高,出现了维护成本增加,交付周期长,新人培养久,技术选型成本高,水平和垂直扩展性差,组建全功能团队难等一系列问题。为解决传统系统架构面临的问题,随着领域驱动设计,持续交付技术,虚拟化技术,小型自治团队组建,基础设施智能化自动化,大型集群系统设计等技术和实践的发展,微服务应运而生。微服务作为一种分布式系统解决方案,聚焦细粒度服务使用的推动。不同的微服务协同工作,每个服务都有自己的生命周期。由于微服务主要围绕业务领域构建模型,而且整合了过去十多年来的新概念和新技术,因此可以避免由传统的分层架构引发的很多问题及陷阱,具有很大的研究价值和实用意义。
本文通过阅读众多相关文献和专著以及相关技术官方网站的在线文档和开源社区 博客,从微服务的单一职责、自治性、领域驱动设计等设计原则开始,研究了其相关技术栈,包括容器虚拟化技术,服务发现技术,通信机制技术,持续集成、交付、部署等。其中较为详细的介绍了提供高可用分布式键值存储及服务发现等功能的Etcd的使用及原理,RESTfulAPI、ThriftRPC、gRPC等同步通信技术的对比以及异步通信中高性能分布式消息队列Kafka的使用和原理等。在以上研究基础上,重点调研了谷歌能够管理容器化应用和服务及进行自动化扩缩容的开源框架Kubernetes的架构原理,包括服务API,控制管理器,调度器,Kubelet,Kube-Proxy,DNS等核心技术以及GUI,日志与监控等组件,并重点分析了框架的安全依赖,包括认证,授权,准入控制等相关技术。并在云上和本机搭建了Kubernetes高可用集群及相关组件,作为微服务实践和密码强度评测实验的基础架构。
依托Kubernetes集群,本文进行了以基于机器学习的密码强度检测为核心的微服务实践,之所以选择这个实验载体而没有选择常见的支付、评论、画像、push等业务载体是因为之前应用微服务架构的实际生产环境应用场景是在“K歌厅”(一种像电话亭一样的微型KTV包厢,目前市面主要有三家:全民k歌自助店,友唱·全民k歌,咪哒唱吧minik)大致流程是用户通过白癜风的身心健康白癜风的食疗