ServiceComb

Netty 和 RPC 框架线程模型分析

元气小坏坏 提交于 2021-02-17 19:00:52
点击上方 蓝色字体 ,选择“标星公众号” 优质文章,第一时间送达 作者: 架构师笔记 来源: http://suo.im/5D3PnG 1.背景 1.1 线程模型的重要性 对于 RPC 框架而言,影响其性能指标的主要有三个要素: I/O 模型:采用的是同步 BIO、还是非阻塞的 NIO、以及全异步的事件驱动 I/O(AIO)。 协议和序列化方式:它主要影响消息的序列化、反序列化性能,以及消息的通信效率。 线程模型:主要影响消息的读取和发送效率、以及调度的性能。 除了对性能有影响,在一些场景下,线程模型的变化也会影响到功能的正确性,例如 Netty 从 3.X 版本升级到 4.X 版本之后,重构和优化了线程模型。当业务没有意识到线程模型发生变化时,就会踩到一些性能和功能方面的坑。 1.2 Netty 和 RPC 框架的线程模型关系 作为一个高性能的 NIO 通信框架,Netty 主要关注的是 I/O 通信相关的线程工作策略,以及提供的用户扩展点 ChannelHandler 的执行策略,示例如下: 图 1 Netty 多线程模型 该线程模型的工作特点如下: 有专门一个(一组)NIO 线程 -Acceptor 线程用于监听服务端,接收客户端的 TCP 连接请求。 网络 I/O 操作 - 读、写等由一个 NIO 线程池负责,线程池可以采用标准的 JDK 线程池实现,它包含一个任务队列和

开源项目没有那么遥远

旧时模样 提交于 2021-01-31 04:23:40
开源项目没有那么遥远 前几天收到了Apache ServiceComb PMC的邀请邮件,这意味着我成为了一名Apache ServiceComb项目的Committer。喜悦之余,我想留下一篇博客作为自己工作的一个阶段性总结,同时也希望这篇文章能够给其他想要加入到开源社区的同学一点参考。 初次接触ServiceComb 最开始接触到“开源”的概念是在大学的计算机课程上,当时对于开源项目的印象就是:开源项目是由一群大牛程序员开发和维护的,作为小白的我只需要拿来用就好了。 毕业之后参加工作,我被分到了一个跟开源项目相关的工作组,需要向 Apache ServiceComb项目 提交代码。当时的心情真是既新奇又紧张,毕竟以前只是单纯地使用过开源软件,而现在自己终于要向开源软件项目提交代码了。这种能够在一个开源项目中提交自己代码的兴奋感,相信很多学软件专业的同学应该能够理解。但是自己又是刚开始工作的小白,担心自己写的代码太差了拿不出手,因此又紧张不已。而事实上我第一次提交代码的经过并没有预想中的那么多波折,作为一个开源小白,提上去的pull request有瑕疵是很正常的事情,根据检视者的意见修改好了就行——毕竟高手不一定高冷,社区的开发者们都是很热心的。 有了第一次提交PR的经历后,后面的工作就慢慢变得轻车熟路了。平常我在开源社区主要做的就是领一些新特性或者修复bug的 issue

速看!速看!150页spring cloud alibaba全解

梦想的初衷 提交于 2020-11-24 18:29:41
今天跟大家分享的是150页spring cloud alibaba全解, 下拉文末获取网盘链接 第一章 微服务介绍 1.1 系统架构演变 1.1.1 单体应用架构 1.1.2 垂直应用架构 1.1.3 分布式架构 1.1.4 SOA架构 1.1.5 微服务架构 1.2 微服务架构介绍 1.2.1 微服务架构的常见问题 1.2.2 微服务架构的常见概念 1.2.2.1 服务治理 1.2.2.2 服务调用 1.2.2.3 服务网关 1.2.2.4 服务容错 1.2.2.5 链路追踪 1.2.3 微服务架构的常见解决方案 1.2.3.1 ServiceComb 1.2.3.2 SpringCloud 1.2.3.3 SpringCloud Alibaba 1.3 SpringCloud Alibaba介绍 1.3.1 主要功能 1.3.2 组件 第二章 微服务环境搭建 2.1 案例准备 2.1.1 技术选型 2.1.2 模块设计 2.1.3 微服务调用 2.2 创建父工程 2.3 创建基础模块 2.4 创建用户微服务 2.5 创建商品微服务 2.6 创建订单微服务 由于文档过大,在这里只给大家展示了一部分, 点击链接获取完整文档 链接: https://pan.baidu.com/s/1bPkeS35l8D2tqqc1sor18Q 提取码:g3eq ※部分文章来源于网络

多云架构下,JAVA微服务技术选型实例解析

流过昼夜 提交于 2020-08-14 22:37:56
【摘要】 本文介绍了基于开源自建和适配云厂商开发框架两种构建多云架构的思路,以及这些思路的优缺点。 微服务生态 微服务生态本质上是一种微服务架构模式的实现,包括微服务开发SDK,以及微服务基础设施。 目前比较成熟的 JAVA 微服务生态包括 servicecomb(华为), spring-cloud (Pivotal), dubbo(阿里), tsf(腾讯)等。gRPC、Thrift 等也用于内部服务之间的通信,但是微服务基础设施比较欠缺。 核心的微服务基础设施包括:注册中心、配置中心、应用网关。此外,分布式事物管理、计划任务、调用链跟踪系统等也是微服务基础设施的组成部分。完整的微服务基础实施还包括开发使能工具,包括接口管理工具、灰度发布管理、代码生成等,这部分主要由云厂商提供,比较少开源方案。 微服务生态的核心是 SDK,而 SDK 的核心是 RPC 框架,这个是不同微服务生态的本质区别。在基础设施方面,不同的微服务生态是可以相互选择的,比如 spring-cloud 生态可以采用 spring-cloud-huawei 接入servicecomb 提供的注册中心 servicecomb-service-center、配置中心 servicecomb-kie,也可以通过 spring-cloud-alibaba 接入阿里的配置中心;servicecomb 也可以通过引入扩展

多云架构下,JAVA微服务技术选型实例解析

。_饼干妹妹 提交于 2020-08-14 07:00:51
【摘要】 本文介绍了基于开源自建和适配云厂商开发框架两种构建多云架构的思路,以及这些思路的优缺点。 微服务生态 微服务生态本质上是一种微服务架构模式的实现,包括微服务开发SDK,以及微服务基础设施。 目前比较成熟的 JAVA 微服务生态包括 servicecomb(华为), spring-cloud (Pivotal), dubbo(阿里), tsf(腾讯)等。gRPC、Thrift 等也用于内部服务之间的通信,但是微服务基础设施比较欠缺。 核心的微服务基础设施包括:注册中心、配置中心、应用网关。此外,分布式事物管理、计划任务、调用链跟踪系统等也是微服务基础设施的组成部分。完整的微服务基础实施还包括开发使能工具,包括接口管理工具、灰度发布管理、代码生成等,这部分主要由云厂商提供,比较少开源方案。 微服务生态的核心是 SDK,而 SDK 的核心是 RPC 框架,这个是不同微服务生态的本质区别。在基础设施方面,不同的微服务生态是可以相互选择的,比如 spring-cloud 生态可以采用 spring-cloud-huawei 接入servicecomb 提供的注册中心 servicecomb-service-center、配置中心 servicecomb-kie,也可以通过 spring-cloud-alibaba 接入阿里的配置中心;servicecomb 也可以通过引入扩展

微服务解决方案Apache ServiceComb(incubating) 发布新版本

北城余情 提交于 2020-03-21 03:06:24
3 月,跳不动了?>>> 近期,微服务解决方案Apache ServiceComb(incubating) 捷报频传,除了LC3大会ServiceComb Workshop成功举办之外,Java-Chassis 1.0.0-m2、Service-Center 1.0.0-m2和Saga 0.2.0版本顺利通过投票,完成发版。 版本变更概览 Java-Chassis 服务间通讯提供文件流传输能力,支持音乐、图片等多媒体场景。 在服务级别QPS控制基础上,新增支持API级别QPS控制 增加脚手架和start.servicecomb.io,支持用户快速构建工程,提供完整的开箱即用能力 新增支持使用Gradle构建 异步编程模型支持CompletableFuture和AsycRestTemplate 扩展Swagger支持类循环依赖,允许服务调用时的出入参数中存在类循环依赖场景 支持使用hibernate注解进行参数校验 新增支持Http2协议 实现错误注入接口,允许通过拦截服务请求构造异常场景 新增服务Dev运行模式,开启Dev模式时,支持契约动态修改 实现优雅停机,关闭服务时进行反注册,确保完成已接受请求并完整释放资源 Service-Center 支持获取Service-Center的服务和实例信息,在集群部署场景下,可动态发现Service Center实例

Dubbo 如何实现分布式事务

送分小仙女□ 提交于 2020-03-10 11:40:51
分布式事务模型 TCC 模型:TCC-Transaction、Hmily XA 模型:Sharding Sphere、MyCAT 2PC 模型:raincat、lcn MQ 模型:RocketMQ BED 模型:Sharding Sphere Saga 模型:ServiceComb Saga TCC TCC事务解决方案本质上是一种补偿的思路,它把事务运行过程分成try、confirm/cancel 两个阶段,每个阶段都由业务代码来控制。需要注意的是,TCC事务和2pc的思想类似,但与2pc实现不同,TCC不再是两阶段提交,而只是它对事务的提交/回滚是通过执行一段confirm/cancel业务逻辑来实现,并且也并没有全局事务来把控整个事务逻辑。 实现过程: try:完成所有业务检查(一致性),预留业务资源。 confirm:确认执行业务操作,只使用try阶段预留的业务资源。 cancel:取消try阶段预留的业务资源。 XA模型(规范) xa是个规范,根据这个思想衍生二阶段提交协议和三阶段提交协议。 XA分布式事务是由一个或者多个Resource Managerd,一个事务管理器Transaction Manager以及一个应用程序 Application Program组成。 资源管理器:提供访问事务资源的方法,通常一个数据库就是一个资源管理器。 事务管理器

一文讲透微服务架构下如何保证事务的一致性

此生再无相见时 提交于 2020-03-04 12:08:13
随着业务的快速发展、业务复杂度越来越高,传统单体应用逐渐暴露出了一些问题,例如开发效率低、可维护性差、架构扩展性差、部署不灵活、健壮性差等等。而微服务架构是将单个服务拆分成一系列小服务,且这些小服务都拥有独立的进程,彼此独立,很好地解决了传统单体应用的上述问题,但是在微服务架构下如何保证事务的一致性呢?本文作者将为大家详细解答。 从本地事务到分布式事务的演变 什么是事务?回答这个问题之前,我们先来看一个经典的场景:支付宝等交易平台的转账。假设小明需要用支付宝给小红转账 100000 元,此时,小明帐号会少 100000 元,而小红帐号会多 100000 元。如果在转账过程中系统崩溃了,小明帐号少 100000 元,而小红帐号金额不变,就会出大问题,因此这个时候我们就需要使用事务了。 这里,体现了事务一个很重要的特性:原子性。事实上,事务有四个基本特性:原子性、一致性、隔离性、持久性。其中,原子性,即事务内的操作要么全部成功,要么全部失败,不会在中间的某个环节结束。一致性,即使数据库在一个事务执行之前和执行之后,数据库都必须处于一致性状态。如果事务执行失败,那么需要自动回滚到原始状态,换句话说,事务一旦提交,其他事务查看到的结果一致,事务一旦回滚,其他事务也只能看到回滚前的状态。隔离性,即在并发环境中,不同的事务同时修改相同的数据时,一个未完成事务不会影响另外一个未完成事务。持久性

一文讲透微服务下如何保证事务的一致性

有些话、适合烂在心里 提交于 2020-02-27 12:47:26
原文地址: 梁桂钊的博客 博客地址: http://blog.720ui.com 欢迎关注公众号:「服务端思维」。一群同频者,一起成长,一起精进,打破认知的局限性。 从本地事务到分布式事务的演变 什么是事务?回答这个问题之前,我们先来看一个经典的场景:支付宝等交易平台的转账。假设小明需要用支付宝给小红转账 100000 元,此时,小明帐号会少 100000 元,而小红帐号会多 100000 元。如果在转账过程中系统崩溃了,小明帐号少 100000 元,而小红帐号金额不变,就会出大问题,因此这个时候我们就需要使用事务了。请参见图 6-1。 这里,体现了事务一个很重要的特性:原子性。事实上,事务有四个基本特性:原子性、一致性、隔离性、持久性。其中,原子性,即事务内的操作要么全部成功,要么全部失败,不会在中间的某个环节结束。一致性,即使数据库在一个事务执行之前和执行之后,数据库都必须处于一致性状态。如果事务执行失败,那么需要自动回滚到原始状态,换句话说,事务一旦提交,其他事务查看到的结果一致,事务一旦回滚,其他事务也只能看到回滚前的状态。隔离性,即在并发环境中,不同的事务同时修改相同的数据时,一个未完成事务不会影响另外一个未完成事务。持久性,即事务一旦提交,其修改的数据将永久保存到数据库中,其改变是永久性的。 本地事务通过 ACID 保证数据的强一致性。ACID是 Atomic(原子性)

珠联璧合 | ServiceComb 集成 Shiro 实践

旧时模样 提交于 2019-12-24 11:41:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Shiro简介 Apache Shiro是一款功能强大、易用的轻量级开源Java安全框架,它主要提供认证、鉴权、加密和会话管理等功能。Spring Security可能是业界用的最广泛的安全框架,但是Spring Security和Spring耦合的太重,脱离了Spring框架就使用不了,所以一个轻量级的安全框架有时也是一个非常不错的选择。 Shiro主要通过安全API来提供四个方面使用: 认证 Authentication –提供用户身份,可以理解为登录验证。 授权 Authorization –访问控制,也就是通常所讲ACL(Access Control List)的RBAC(Role Base Access Control)或者ABAC(Attribute Base Access Control)。 加密 Cryptography –加密、保护数据,确保数据安全。 会话管理 Session Management –登录后的会话管理,Shiro有独立的会话管理机制,可以是J2EE的会话,也可以是普通Java应用的。 Shiro有几个关键的核心概念:Subject,SecurityManager和Realms,我们简单的介绍下这几个概念的含义: Subject 权限责任主体,主要是让系统识别要管理的对象