微服务实战之春云与刀客(一)—— 微服务开篇
春云即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会有重复的嫌疑。所以实际实施的过程中就得考虑清楚了。
微服务实战之春云与刀客(一)—— 微服务开篇相关推荐
- 微服务实战之春云与刀客(三)—— 面向接口调用代码结构实例
2019独角兽企业重金招聘Python工程师标准>>> 概述 在上一篇中提到了spring cloud 面向接口调用的开发风格,这一篇会举一个简单的但完整的例子来说明整个代码结构. ...
- 微服务实战之春云与刀客(四)—— docker swarm 集群实战
概述 docker swarm 是一个非常简单的docker 原生集群部署环境.在docker swarm 出来之前,要搭建一个docker 集群需要复杂的网络运维和配置能力,而docker swar ...
- 微服务实战之春云与刀客(五)—— spring cloud与docker swarm集群
概述 原文:https://yq.aliyun.com/articles/618620 微服务与docker结合是必然的趋势,本文介绍spring cloud与docker swarm集群实现微服务极 ...
- Go + gRPC-Gateway(V2) 构建微服务实战系列,小程序登录鉴权服务(三):RSA(RS512) 签名 JWT(附demo)
系列 云原生 API 网关,gRPC-Gateway V2 初探 Go + gRPC-Gateway(V2) 构建微服务实战系列,小程序登录鉴权服务:第一篇 Go + gRPC-Gateway(V2) ...
- GitChat · 架构 | 为什么微服务实施那么难?如何高效推进微服务架构演进
GitChat 作者:顾宇 原文:为什么微服务实施那么难?如何高效推进微服务架构演进 关注公众号:GitChat 技术杂谈,一本正经的讲技术 前言 笔者从 2013 年加入 ThoughtWorks ...
- 为什么微服务实施那么难?如何高效推进微服务架构演进
为什么微服务实施那么难?如何高效推进微服务架构演进 前言 笔者从 2013 年加入 ThoughtWorks 至今共 4年时间.在这 4 年的时间里,我分别以 开发人员, DevOps 工程师.Dev ...
- 微服务实现不同登陆_PaaS与IaaS在微服务架构实现方面的6大不同
当前,选择PaaS或者IaaS构建微服务是个非常火热的话题.本文主要会就基于PaaS和IaaS实现微服务架构的6大不同之处进行详细阐述. 为什么要使用微服务架构? 烟囱式的系统构架,可能会变成构建企业 ...
- SpringCloud Alibaba微服务实战(七) - 路由网关(Gateway)全局过滤
说在前面 全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP 访问限制,监控,限流等等. 创建路由网关(Gateway)启动服务cloud-ac ...
- SpringCloud Alibaba微服务实战(五) - Sentinel实现限流熔断
什么是Sentinel? 请查看文章:SpringCloud Alibaba微服务实战(一) - 基础环境搭建 构建服务消费者cloud-sentinel进行服务调用 服务创建请查看文章:Spring ...
最新文章
- CPU 是如何理解 01 二进制的?
- samba网络服务的搭建和配置
- JavaScript OOP(2)定义JavaScript类
- Elasticsearch Query DSL基础介绍
- spring Quartz cron表达式
- 将字符串中的大写字母变成小写字母
- 苹果app商品定价_【知乎问答】苹果 App Store 新推出的 1 元或 3 元定价对开发者有什么影响?...
- 内核错误Linux,ubuntu14.04更新内核出错
- kaffe java_Java虚拟机Kaffe的研究与实现
- 【MySQL部署与安装】
- 朗志轻量级项目管理解决方案截图
- 【模拟信号】基于matlab抑制载波双边带调幅信号产生+解调【含Matlab源码 985期】
- 计算机软件 属于特许权,​软件使用权是否属于无形资产
- 量子计算机平行宇宙,量子纠缠效应揭示:每个人的行为也会影响到其它平行宇宙里的自己...
- 论文阅读|目标检测之CE-FPN,将通道增强运用到上采样,减少信息丢失,同时添加了通道注意力机制
- 碱基数据处理中的算法研究
- jquery获取元素四种方式。
- 18种为你的网站引流的好方法
- “展厅三维全景”技术,将产品和企业文化以vr展示出来
- 正確使用 SetCapture ReleaseCapture [譯]
热门文章
- linux卡住重启_linux死机解决办法
- jQuery的几种显示隐藏方法
- GraphCL: Graph Contrastive Learning with Augmentations笔记
- 图片嵌入隐藏-大容量的信息隐藏算法
- php owncloud_技术|搭建私有云:OwnCloud
- Anaconda学习总结
- css零到一基础教程009:CSS HSL 颜色
- day03-python字符串
- 漫画算法python篇_漫画算法:小灰的算法之旅(Python篇)(全彩)
- java计算机毕业设计springboot+vue学生宿舍管理系统