一、微服务实现分布式服务架构
以springboot、springcloud为主的微服务解决方案
问题一:为什么用微服务?
六大优势
-1、复杂度可控:在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。
-2、独立部署:由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个微服务发生变更时无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短应用交付周期。
-3、技术选型灵活:微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术栈。由于每个微服务相对简单,当需要对技术栈进行升级时所面临的风险较低,甚至完全重构一个微服务也是可行的。
-4、容错:当某一组建发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性的不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。
-5、扩展:单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。
-6、功能特定:一个微服务一般完成某个特定的功能,比如消息管理、客户管理等等。每一个微服务都有自己的业务逻辑和适配器。一些微服务还会发布API给其它微服务和应用客户端使用。其它微服务完成一个Web UI,运行时,每一个实例可能是一个云VM或者是Docker容器。
##### 问题二:SpringCloud是什么?
>Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
##### 问题三:为什么选择Spring Cloud,及它的前景怎样?:
>Spring Cloud对于互联网公司来说是一种福音,它是最先进的分布式解决方案之一,发源于美国。使用Spring Cloud一站式解决方案能在从容应对业务发展的同时大大减少开发成本。同时,随着近几年微服务架构和Docker容器概念的火爆,也会让Spring Cloud在未来越来越“云”化的软件开发风格中立有一席之地,尤其是在目前五花八门的分布式解决方案中提供了标准化的、全站式的技术方案,意义可能会堪比当前Servlet规范的诞生,有效推进服务端软件系统技术水平的进步。
### 二、容器化打造DevOps智能自动运维
>其实软件本应是美的,而美的软件应该是简单的,正所谓道生一,一生二,二生三,三生万物。
>以docker、kubenetes为主
##### 问题一:为什么要容器化?
-1.更快速的交付和部署
>对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
>开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
-2.更高效的虚拟化
>Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
-3.更轻松的迁移和扩展
>Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
-4.更简单的管理
>使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
#### 问题二:为什么使用kubernetes?
>Kubernetes作为Docker生态圈中重要一员,是Google多年大规模容器管理技术的开源版本,是产线实践经验的最佳表现[G1] 。无论是公有云还是私有云甚至混合云,Kubernetes将作为一个为任何应用,任何环境的容器管理框架无处不在。正因为如此, 目前受到各大巨头及初创公司的青睐,如Microsoft、VMWare、Red Hat、CoreOS、Mesos等,纷纷加入给Kubernetes贡献代码。随着Kubernetes社区及各大厂商的不断改进、发展,Kuberentes将成为容器管理领域的领导者。
##### 使用kubernetes带来的好处
Kubernetes是Google开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下:
-1.使用Docker对应用程序包装(package)、实例化(instantiate)、运行(run)。
-2.以集群的方式运行、管理跨机器的容器。
-3.解决Docker跨机器容器之间的通讯问题。
-4.Kubernetes的智能自我修复机制使得容器集群总是运行在用户期望的状态。
当前Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平台,除此之外,也可以直接运行在物理机上。
### 三.大数据
>当数据量达到一定量级时,存在两个问题:
>第一:如何存储及容错,当某块硬盘损坏时,如何保证数据能够恢复;
>第二:如何计算,能在大量的数据中,抓取出有效地数据,并转化成我们需要的数据,为我们提供决策,或者完善系统。此时,大数据技术便是不二选择。
>存储框架包括:Hadoop,HBase,Kudo等。
>计算框架包括:Storm,Spark,Hive,Impala,Kylin,AllUnix等。
####以推荐系统为例:
使用如下技术:
Flume + Hadoop + Kafka + Storm
#####从如下三个方面进行着手:
-1.日志收集
在应用机器中部署flume_agent进程,负责对单击的日志收集工作, 并将日志以一定的策略发送给中心服务器。
此时,我们可以收集用户的浏览行为,并归类。
-2.日志存储
中心服务器将接收到flume_agent发送的日志,并将日志根据路由规则写到相应的存储里,如永久存储的HDFS里,或者Kafka(Kafka里存储7天/15天的日志)里,并给Storm系统提供实时日志流。
此时,将所有的用户浏览行为存储到日志中心。
-3.日志分析
Strom通过控制节点(Nimbus节点)将所有任务(Topology)分片,分成一个个Task,并将Task和工作节点(Supervisor节点)相关的信息提交到 zookeeper集群上,Supervisor会去zookeeper集群上认领自己的Task,通知自己的Worker进程进行Task的处理。 Storm可以将结果不做保存,放在内存中,也可以每次都更新数据库,也可以采用NoSQL存储。最后,可通过Storm UI来监控。
此时,通过Storm将用户行为分析存储入口,作为应用系统的推荐基础数据。
大数据也是人工智能等技术的基础,很多应用业务也是基于大数据发展的。
### 四.性能监控告警
>为了达到全链路跟踪、立体化监控的、智能化管理的效果,我们从三个方面,九个维度着手,以多种开源软件组合并深度开发。
#### 三个方面:
-1.机器:这个会包括机器的CTL,网络的负载,网络的内存。
-2.服务: 从服务的角度来说,服务的稳定性,服务的吞吐量,服务的响应时间。
-3.业务:再顶层一些就是业务,包括用户的访问量,我们的承担量及基于大数据下的用户行为分析,智能推送。
#### 九个维度:
-1.Web端进行监控
-2.客户端监控
-3.日志监控
-4.JVM监控
-5.数据库监控
-6.RPC Server
-7.DB client
-8.服务器监控
-9.网络监控
#### 多种开源软件:
##### 利器1:日志收集平台:ELK
-1.可提高用户响应速度。通过ELK筛选出数据库慢查询日志,开发再对语句进行优化,则可提高数据库响应时间,进而提高用户响应时间。
-2.可提高聆客软件可用率。当有故障时,可用ELK快速查询所需要的日志,查看故障原因,缩短故障定位时间,进而提高可用率。
-3.可总结聆客网页的正常状态百分比。通过ELK筛选nginx状态码结果,绘制状态码扇形图,可清晰知道网页访问有多少是正常的。
-4.可定位聆客用户的地图分布。通过ELK抓取用户访问的公网IP,再绘制Tile map地图,则可在地图上清楚看来聆客在全国各地的分布,定位客户来源。
-5.可优化聆客系统。通过开发、运维定期查看ELK上的图表、周报,可发现隐藏问题(例如某个nginx路径访问持续过长、数据库有暂未影响功能的error等),进行排除,从而减少潜在的隐患,及优化系统。
##### 利器2:性能监控平台:zabbix
>zabbix是一个基于WEB界面的提供分布式系统监视以及网
络监视功能的企业级的开源解决方案。
zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
##### 利器3:持续集成平台:Jenkins
>目前持续集成(CI)已成为当前许多软件开发团队在整个软件开发生命周期内侧重于保证代码质量的常见做法。它是一种实践,旨在缓和和稳固软件的构建过程。并且能够帮助您的开发团队应对如下挑战:
-l.软件构建自动化 :配置完成后,CI系统会依照预先制定的时间表,或者针对某一特定事件,对目标软件进行构建。
-2.构建可持续的自动化检查 :CI系统能持续地获取新增或修改后签入的源代码,也就是说,当软件开发团队需要周期性的检查新增或修改后的代码时,CI系统会不断确认这些新代码是否破坏了原有软件的成功构建。这减少了开发者们在检查彼此相互依存的代码中变化情况需要花费的时间和精力。
-3.构建可持续的自动化测试 :构建检查的扩展部分,构建后执行预先制定的一套测试规则,完成后触发通知(Email,RSS等等)给相关的当事人。
-4.生成后后续过程的自动化 :当自动化检查和测试成功完成,软件构建的周期中可能也需要一些额外的任务,诸如生成文档、打包软件、部署构件到一个运行环境或者软件仓库。这样,构件才能更迅速地提供给用户使用。
##### 利器4:运维自动化平台:Ansible
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
### 5.代码管理与规范
>随着功能的增加,开发人员的增多,代码越来越难以维护,人员越来越难以协同。管理难度呈几何式上升,引进成熟可靠的管理工具势在必行
##### 工具1:代码管理迭代平台:GitLab
GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用。
##### 工具2:服务契约(代码即文档:swagger+java doc)
-1.Swagger 可以生成一个具有互动性的API控制台,开发者可以用来学习和尝试API。
-2.Swagger 可以生成客户端SDK代码用于各种不同的平台上的实现。
-3.Swagger 文件可以在许多不同的平台上从代码注释中自动生成。
##### 工具3:代码质量平台:SonaQube
Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量
通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测
http://blog.csdn.net/hunterno4/article/details/11687269