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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

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

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

什么是微服务(Microservice)

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

微服务的特点

从服务发展历程来看,微服务分布点较多,互相可以调用。
image
所以微服务有如下特点:
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

微服务不是银弹

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

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

微服务框架选型

说完,马上就动手了,采用什么框架呢?
在淘宝的时候,可以使用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会有重复的嫌疑。所以实际实施的过程中就得考虑清楚了。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
运维 监控 Go
Go语言微服务实战与最佳实践
【2月更文挑战第14天】本文将深入探讨使用Go语言进行微服务实战中的最佳实践,包括服务拆分、API设计、并发处理、错误处理、服务治理与监控等方面。通过实际案例和详细步骤,我们将分享如何在Go语言环境中构建高效、稳定、可扩展的微服务系统。
|
19天前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
38 0
|
30天前
|
开发框架 移动开发 JavaScript
SpringCloud微服务实战——搭建企业级开发框架(四十六):【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建
正如优秀的软件设计一样,uni-app把一些移动端常用的功能做成了独立的服务或者插件,我们在使用的时候只需要选择使用即可。但是在使用这些服务或者插件时一定要区分其提供的各种服务和插件的使用场景,例如其提供的【uni-starter快速开发项目模版】几乎集成了移动端所需的所有基础功能,使用非常方便,但是其许可协议只允许对接其uniCloud的JS开发服务端,不允许对接自己的php、java等其他后台系统。
136 2
|
2月前
|
Java API 调度
从Spring Cloud 开始,聊一聊微服务架构的设计与实战
随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。
366 1
从Spring Cloud 开始,聊一聊微服务架构的设计与实战
|
2月前
|
存储 Dubbo 应用服务中间件
SpringCloud | Dubbo 微服务实战——注册中心详解
SpringCloud | Dubbo 微服务实战——注册中心详解
|
3月前
|
Prometheus 监控 Cloud Native
SpringCloud微服务实战——搭建企业级开发框架(四十五):【微服务监控告警实现方式二】使用Actuator(Micrometer)+Prometheus+Grafana实现完整的微服务监控
无论是使用SpringBootAdmin还是使用Prometheus+Grafana都离不开SpringBoot提供的核心组件Actuator。提到Actuator,又不得不提Micrometer,从SpringBoot2.x开始,Actuator的功能实现都是基于Micrometer的。
243 0
|
3月前
|
JSON Java 数据库
Spring Cloud【Finchley】实战-02订单微服务
Spring Cloud【Finchley】实战-02订单微服务
93 0
|
3月前
|
Java 测试技术 数据库
Spring Cloud【Finchley】实战-01注册中心及商品微服务
Spring Cloud【Finchley】实战-01注册中心及商品微服务
98 0
|
4月前
|
Java 数据库连接 微服务
Java程序员必学知识:高并发+微服务+数据结构+Mybatis实战实践
BATJ最全架构技术合集:高并发+微服务+数据结构+SpringBoot 关于一线互联网大厂网站的一些特点:用户多,分布广泛、大流量,高并发、海量数据,服务高可用、安全环境恶劣,易受网络攻击、功能多,变更快,频繁发布、从小到大,渐进发展、以用户为中心。 如果你工作中够仔细,你会发现这些特点跟高并发、分布式、微服务、Nginx这些技术密切相关的,是因为只要你的公司在上升,用户量级都会与日俱增,高性能、高并发的问题自然避免不了,话不多说往下看。
|
4月前
|
Java 微服务
微服务-美团动态ThreadPoolExecutor底层实现源码实战-改进4
微服务-美团动态ThreadPoolExecutor底层实现源码实战-改进4