微服务实战之春云与刀客(一)—— 微服务开篇

春云即spring cloud ,刀客即docker,这种翻译似乎比较好玩!
这里是春云与刀客不得不说的故事,不会讲太多的入门,更多的是实战和一些规范,以及通过春云和刀客如何简化微服务开发,这些在一些书籍都是没有介绍的。

本篇讲微服务概念和技术选型。

什么是微服务(Microservice)

通常别人问这个问题都不知道如何回答。其实很简单,按字面拆解就是,微服务就是:
微小的服务。
什么是微小?就是单一职责
什么是单一职责?就是一个服务只干一类事情,多的事情我不干。我这个服务只管怎么按头,不管捏脚。
所以暂且给出一个定义:以单一职责划分功能模块组件,通过组件间通信完成复杂业务系统搭建的服务体系

微服务的特点

从服务发展历程来看,微服务分布点较多,互相可以调用。

所以微服务有如下特点:
1)根据业务模块划分服务种类。
按业务拆分服务,这是“水平拆分”;在技术层面的“前后分离”,属于“垂直拆分”;横纵一起切,就把单一的应用拆分成网状的小块应用,这是微服务中“微”思想的体现。

2)每个服务可以独立部署并且互相隔离。
独立部署与互相隔离,这点充分体现了“我为人人、人人为我”的设计理念,这是微服务中「服务」思想的体现。

3)通过轻量的 API 调用服务。
关于轻量 API,微服务本身是推荐使用轻量的通讯协议和简单的数据结构,实际上,实施环节通常采用的都是 http+json 的方式。

4)服务需要保证良好的高可用性。

微服务的优点

最大优点就是:人员分工明确,少些扯淡,提高工作效率。
具体理论基础可以看看康威定律和人月神话。
其中有这么个公式:沟通成本 = n(n-1)/2
5个人的项目组,需要沟通的渠道是 5*(5–1)/2 = 10
50个人的项目组,需要沟通的渠道是50*(50–1)/2 = 1,225

微服务不是银弹

说完优点,也该谈谈缺点了。

但不要怕,搞技术的就是要跨过这些大山,狠踩这些坑。

微服务框架选型

说完,马上就动手了,采用什么框架呢?
在淘宝的时候,可以使用HSF服务框架,到了市面上,国内用的比较多的是dubbo。dubbo是一个分布式服务框架,底层NIO基于netty框架,可惜在阿里内部一山不能容两虎,dubbo被废了。HSF经过多年逐渐优化,性能会更好,但也肯定跟内部各种中间件绑得太死,没法剥离给外头用;而dubbo产品化比较好,拿到外头好部署,市场很受欢迎,但好几年不更新了。然而,阿里云在集成各种第三方产品工具的时候,又瞄上了dubbo,能带来收益的东西肯定要用,所以在17年快年底的时候GitHub有有新版本的dubbo了。

可惜,这时我已经瞄上了春云了。首选,有哪个用java的互联网不用spring的?而Spring Cloud作为spring家族的后续重量级产品肯定也是越来越好的,肯定是以后技术的一个趋势,有现成的全家桶为何不用?
唯一担忧就是,Spring Cloud是用http方式的,比起RPC方式的性能差。其实这层不必担心,一是spring cloud也是利用连接池的,不是每次请求都重新连接的,而且有人做过实验,系统大都消耗在处理代码逻辑、访问数据库资源这些上面,而数据传输影响很小。二是RESTFUL API已经越来越普遍了。

docker swarm

说到微服务,就不能不提docker,而用docker,我们就要用最好的docker swarm集群。正好我们使用的时候,docker swarm已经比较稳定和强大了。我还是不明白,那docker swarm能干啥?
1)你以前是一个点一个点地run docker,现在swarm可以一次性跑多个点,哪天服务器压力太大,2个点不够了,你执行一个“docker service scale 服务名=5”命令马上就扩大到了5个点。
2)我的docker部署在多台物理机器的,它们直接怎么通信呢,哦,有个docker原厂工程师在github上推出了pipework工具,很牛逼,在此基础上可以实现docker直接通信,然后我去看了下各种网卡和ip地址操作命令,结果一脸的懵逼。然后还有其他各种方案的,弄得也很复杂,反正我也不懂。最后,还有一种成熟的用得比较广泛的方案,就是google的Kubernetes编排技术,我也没亲手试过,只是听说配置也有些复杂。docker swarm就是参考Kubernetes弄的,但因为swarm是原生支持docker的,所以使用上会更简单,所以我选择了swarm。
不过事情没有绝对,10 月 17 日,Docker 在丹麦哥本哈根举行的 DockerCon 大会上宣布,将扩大其 Docker 平台并选择积极拥抱容器编排对手 Kubernetes。这意味着 Docker 客户及开发人员将可以选择同时使用 Kubernetes 与 Docker Swarm 进行容器工作负载的编排。
这些都是后话了,当前选择docker swarm没毛病。

docker的野心很大,docker swarm已经包含了一套自己得微服务理念(例如内含注册中心), 一些地方跟spring cloud会有重复的嫌疑。所以实际实施的过程中就得考虑清楚了。

时间: 2024-10-11 17:26:19

微服务实战之春云与刀客(一)—— 微服务开篇的相关文章

微服务实战之春云与刀客(二)—— Spring cloud 实现仿RPC面向接口调用方式

概述 像HSF.dubbo这种RPC框架,客户端都是通过接口(Interface)调用服务的,无须自己拼装调用方式,客户端就像调用本地类方法一样.而spring cloud原生的客户端调用时通过RestTemplate发起Http调用请求,需要手动指定URL和参数,在使用上比较费劲,后来出现了申明式服务调用--Spring Cloud Feign,终于使调用得到了解放,而本文就是讲述如何极致地利用Feign来进行微服务开发,如何定义代码结构规范. RestTemplate RestTemplat

微服务实战(二):使用API Gateway

本文讲的是微服务实战(二):使用API Gateway,[编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用的理想选择. 当你决定将应用作为一组微服务时,需要决定应用客户端如何与微服务交互.在单体式程序中,通常只有一组冗余的或者负载均衡的服务提供点.在微服务架构中,每一个微服务暴露一组细粒度的服务提供点.在本篇文章中,我们来看它如何影响客户端到服务端通信,同时提出一种API Gateway的方法. 介绍 假定你正在为在线购物应

微服务实战(一):微服务架构的优势与不足

本文讲的是微服务实战(一):微服务架构的优势与不足,[编者的话]本文来自Nginx官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战.正如作者所说,微服务架构更适合用于构建复杂的应用,尽管它也有自己的不足. 这篇文章作者是Chris Richardson,他是早期基于Java的Amazonite EC2 PaaS平台CloudFoundry.com的创始人.现在他为企业提供如何开发和部署应用的咨询服务.他也经常在http://microservice

微服务实战(六):选择微服务部署策略

本文讲的是微服务实战(六):选择微服务部署策略,[编者的话]这篇博客是用微服务建应用的第六篇,第一篇介绍了微服务架构模板,并且讨论了使用微服务的优缺点.随后的文章讨论了微服务不同方面:使用API网关,进程间通讯,服务发现和事件驱动数据管理.这篇文章,我们将讨论部署微服务的策略. 本系列文章: 微服务实战(一):微服务架构的优势与不足 微服务实战(二):使用API Gateway 微服务实战(三):深入微服务架构的进程间通信 微服务实战(四):服务发现的可行方案以及实践案例 微服务实践(五):微服

微服务实战(三):深入微服务架构的进程间通信

本文讲的是微服务实战(三):深入微服务架构的进程间通信,[编者的话]这是采用微服务架构创建自己应用系列第三篇文章.第一篇介绍了微服务架构模式,和单体式模式进行了比较,并且讨论了使用微服务架构的优缺点.第二篇描述了采用微服务架构应用客户端之间如何采用API Gateway方式进行通信.在这篇文章中,我们将讨论系统服务之间如何通信. 简介 在单体式应用中,各个模块之间的调用是通过编程语言级别的方法或者函数来实现的.但是一个基于微服务的分布式应用是运行在多台机器上的.一般来说,每个服务实例都是一个进程

视觉中国:基于容器云的同城双活微服务架构上云实践

本文正在参加"最佳上云实践"评选,来给我们投票吧:https://yq.aliyun.com/activity/158(编号7) 视觉中国集团(Visual China Group)创立于2000年6月,是中国领先的视觉影像产品和服务提供商.视觉中国集团是以"视觉创造价值,视觉服务中国"为愿景的A股唯一互联网文化创意上市公司(股票代号000681,股票简称:视觉中国).视觉中国集团以"视觉内容与服务"."视觉社区"和"

混合云/多云环境如何部署微服务

微服务能够为混合云或多云部署带来大量的好处,但是它们也能够带来与网络.安全性等相关的新挑战. 大多数IT企业已经开始认识到在开发和部署中实施软件组件化的好处.在云中,组件化带来了重要的优势,例如增加弹性和支持横向扩展. 微服务(即通常在应用程序中共享的小型功能组件)能够显著地放大这些优势.但是,首先用户必须正确地规划.开发和部署微服务. 了解如何让微服务起作用 如需开始规划微服务,IT团队需要了解微服务与以服务为导向架构中应用程序组件或元素的不同之处.微服务不是完整的应用组件:它们是在应用中作为

基于微服务和Docker容器技术的PaaS云平台架构设计

本文讲的是基于微服务和Docker容器技术的PaaS云平台架构设计[编者的话]在系统架构上,PaaS云平台主要分为微服务架构.Docker容器技术.DveOps三部分,这篇文章重点介绍微服务架构的实施. [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训以容器存储和网络为主题,包括:Docker Plugin.Docker storage driver.Docker Volume Pulgin.Kubernetes Storage机制.容器网络实现原理和模型.Docker网络实现.网络插件.

中间件和微服务,Docker以及原生云架构的关系

微服务和Docker的发展势头 微服务和容器的主要目标是缩短软件开发时间,以及实现开发.部署以及运维的更大灵活性.为什么它过去几个月的发展势头这么猛?因为几乎所有科技巨头企业如亚马逊,谷歌,Facebook,Netflix都在这里激烈竞争. 微服务就像是一个面向服务的架构(SOA):这是一种架构和供应商技术分别独立的设计理念.因此,目前并没有明确的界定标准或规范.你永远需要在和其他人讨论之前定义你所理解的微服务术语.每个人都有不同的定义.在这篇文章中微服务是被开发,部署和独立缩放的服务.它们可以