part-one-microservices

AntiCrawler
• 阅读 1041

microservices

微服务架构提供一个拆分大型应用为较小可相互影响通信的服务的手段。从整体拆分,每个服务可独立交付, 使得每个服务可独立的部署, 升级 , 缩小, 和替代。服务间通信通常通过网络连接HTTP 调研(request/response). [Web sockets](),
[message queues]() , [pub/sub](), 和 [remote procedure calls(RPC)]() 也可以被用于连接独立组建。

每个独立服务专注于一个单一任务, 通常按业务单元分离, 由 RESTful 协议管理。

课程目标是详细介绍微服务的方式开发应用。 少谈为什么, 专注怎么做。 微服务很难。 它有大量的挑战和问题很难解决。 开始拆分大型应用前记住这一点。

关注隔离

服务清晰的分离使开发更专注他们的特长领域,比如语言,框架,依赖, 工具和构建管道。

例如, 一个前端 JavaScript 工程师可开发面向客户的视图,不需要理解后端 API 的代码实现。 可自由选择语言和框架,只需要通过 AJAX 请求来消费 RESTful API来与后端通信。换句话说, 因为通过 APIs 通信开发者可以将一个服务看作一个黑箱。实际的实现和复杂被隐藏。

也就是说, 这是一个好注意来创建一些组织标准来确保每个团队可以一起发挥作用。例如代码质量,风格检查,代码检查, API 设计。

清晰的分离意味着错误可最大限度的定位到开发者所工作的服务。使你可以安排初级开发到较不严格的服务即使他挂掉了对应服务, 剩余整体应用不受影响。

可独立部署意味着更少的耦合使得规模化更容易。 也有助于消除一个团队堆另一个团队依赖完成的等待。

更小的代码库

不需要理解整个系统,小代码库更容易理解。只要有固定的必要 API 设计, 微服务栈的应用可以更快部署,更容易测试, 重构, 和规模化。服务保持一致的开发标准很重要,开发可以更容易从一个服务到另外一个。

加速反馈回路

在微服务中,开发通常掌握应用从立项到交付的整个生命周期。使团队不需要绑定特定的技术栈--像客户端UI,服务端等--团队可以更聚焦产品。自己为交付应用到用户负责。 因此, 应用如何在真实环境运行更清晰可见。这加速反馈循环,更容易修复 bug 和迭代。

弊端

设计复杂

决定拆分应用为微服务并不是个轻松的任务。 通常在整个大项目更容易重构成独立模块。

一旦拆分一个服务就无法回头。

网络复杂

通常一个大型应用所有事情发生于同一线程。 不需要每次调用其它服务。只要你把应用拆分成微服务, 你会发现你将不得不进行网络调用, 之前你只需要调用某一函数。

这可能导致问题,特别是多个应用需要和另外一个通信, 导致乒乓效应。 不得不说明服务全面下降的原因。

基础设施

多服务将代码库复杂度转移到了平台和基础设施。 这可能很昂贵。
另外你不得不使用正确的工具和适当的人力资源管理。

数据持久化

多数应用有状态曾, 像数据库和任务队列。 微服务站也需要记录服务部署地点和实例数量。 当一个实际服务实例启动,可合适的分配路由流量。 这通常称为 [service discovery]().

由于我们处理容器,我们需要特别关注如何处理状态容器,因为他们不应下降。

隔离特定服务的状态使得它分享和复制机器困难。你通常不得不处理
不同来源且频繁调整的情况,这归结为设计原因。

集成测试

通常, 使用微服务架构开发应用, 你无法完整的测试所有服务知道你部署到一个预发或生产服务器。这获得反馈的时间太长。 幸运的是, Docker 能通过更容易的连接本地独立小应用服务来帮助加速这一个进程。

日志,监控, 和调试也更难了。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Spring Cloud 里 Eureka 什么是微服务及微服务的特点
1.什么是微服务/微服务的特点单一职责:微服务中的每一个服务都对应唯一的业务能力,做到单一职责微:微服务的服务拆分粒度很小,列如一个用户管理就可以作为一个服务,每个服务虽小,但五脏俱全独立:自治是说服务间相互独立,互不干扰团队独立:每个服务都是一个独立的开发团队,人数不
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
京东云开发者 京东云开发者
11个月前
Proxyless的多活流量和微服务治理
1.引言1.1项目的背景及意义在当今的微服务架构中,应用程序通常被拆分成多个独立的服务,这些服务通过网络进行通信。这种架构的优势在于可以提高系统的可扩展性和灵活性,但也带来了新的挑战,比如:服务间通信的复杂性:不同服务之间需要进行可靠的通信,处理失败重试、
京东云开发者 京东云开发者
11个月前
Proxyless的多活流量和微服务治理
1.引言1.1项目的背景及意义在当今的微服务架构中,应用程序通常被拆分成多个独立的服务,这些服务通过网络进行通信。这种架构的优势在于可以提高系统的可扩展性和灵活性,但也带来了新的挑战,比如:服务间通信的复杂性:不同服务之间需要进行可靠的通信,处理失败重试、