Dubbo

分布式架构的演变过程

杀马特。学长 韩版系。学妹 提交于 2021-01-24 00:52:30
一、前言 ​  随着社会的发展,技术的进步,以前的大型机架构很显然由于高成本、难维护等原因渐渐地变得不再那么主流了,替代它的就是当下最火的分布式架构,从大型机到分布式,经历了好几个阶段,我们弄明白各个阶段的架构,才能更好地理解和体会分布式架构的好处,那么本文我们就来聊聊分布式架构的演进过程,希望能给大家带来眼前一亮的感觉。 二、背景说明 ​  我们都知道一个成熟的大型网站的系统架构并非一开始就设计的非常完美,也没有一开始就具备高性能、高并发、高可用、安全性等特性,而是随着用户量的增加、业务功能的扩展逐步演变过来的,慢慢的完善的。 在这个过程中,开发模式、技术架构等都会随着迭代发生非常大的变化。 而针对不同业务特征的系统,各自都会有自己的侧重点,例如像淘宝这类的网站,要解决的重点问题就是海量商品搜索、下单、支付等问题; 像腾讯这类的网站,要解决的是数亿级别用户的实时消息传输;而像百度这类的公司所要解决的又是海量数据的搜索。每一个种类的业务都有自己不同的系统架构。 ​  下面我们来简单模拟一个架构演变过程。 我们以 javaweb 为例,来搭建一个简单的电商系统,从这个系统中来看系统的演变过程。要注意的是接下来的演示模型, 关注的是数据量、访问量提升,网站结构的变化, 而不关注具体业务的功能点。其次,这个过程是为了让大家能更好的了解网站演进过程中的一些问题和应对策略。

从 2018 年 Nacos 开源说起

和自甴很熟 提交于 2021-01-23 05:01:39
2018 年夏天 国内微服务开源 领域,迎来了一位新成员。此后,在构建微服务注册中心和配置中心的过程中,国内开发者多了一个可信赖的选项。 Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台( 官方网站 ),它凝聚了阿里巴巴十多年来在超大规模注册和配置上的最佳实践,可以用在微服务场景作为服务注册中心、配置中心等核心场景中,和阿里的其他微服务开源项目一样,Nacos 也是始于阿里,成长于社区的典型。 为什么要开源 Nacos ? 在大规模服务发现和服务治理领域,现有的开源解决方案并非已经非常完美,阿里巴巴从 IOE 集中式应用架构升级为互联网分布式服务化架构的演进过程中,积累了大量有关服务注册和服务配置的实践经验,而这些经验是可以在各个行业大规模复用。除此之外,更重要的是,希望和社区开发者共同发展,让 Nacos 可以帮助国内企业更自由的构建基于云原生应用的动态服务发现、配置和服务管理。 相比其他服务注册和配置中心开源方案,Nacos 的起步虽然晚了点,但除了注册和配置中心的功能外,他还提供了动态服务发现、服务共享与管理的功能,在大规模场景下具备更优秀的性能,在易用性上更便捷,分布式部署上更灵活。例如和 Consul / Eureka / Zookeeper 相比:(内容摘自 《主流微服务注册中心浅析和对比》 ) Nacos Consul

彻夜怒肝!Spring Boot+Sentinel+Nacos高并发已撸完,快要裂开了!

我的梦境 提交于 2021-01-22 14:38:06
都说程序员工资高、待遇好, 2021 金三银四就要到了, 你的小目标是 30K、40K,还是 16 薪的 20K? 作为一名 Java 开发工程师,当能力可以满足公司业务需求时,拿到超预期的 Offer 并不算难。然而,提升 Java 核心能力最快、最有效, 短期内升职加薪的方法,到底是什么? 首先,你需要跳出日常工作,接触更有深度、更前沿的顶级项目 。 一个简单的逻辑:大厂之所以能够给到高于行业水准的薪资,正是因为即使是普通开发人员,也要应对很多 复杂的场景 。这些复杂场景和项目,就像“墙外的世界”,没有看过,没有接触过,你就无法进行体系化的学习和建立认知, 技术壁垒自然就出现了。 所以,如果你期望通过个人努力,实现收入增长和职位晋升, 那最好的方式, 一定是多学透几个大厂的真实项目经验。 比如炙手可热的 电商平台系统 ,它包含微服务系统、高并发设计与性能调优,涉及 Spring Boot、Dubbo 等核心组件 的应用,还有秒杀活动用到的 Nginx、Redis、MQ、DB 等, 从底层组件应用,到模块设计一应俱全 ,非常适合深入学习和反复琢磨。 但想要快速吃透繁琐的电商系统并不简单,在自学的过程中,难免会遇到一些困难: 日常工作接触的技术维度偏少,对电商系统缺乏基本的认知与概念,无从学起。而网上的资料零零散散,经常讲解不透彻或技术点已过时,耗费大量精力却没有太多收获。

大流量场景下如何云淡风轻地进行线上发布?

余生颓废 提交于 2021-01-21 12:45:10
简介: 本文介绍了微服务治理下金丝雀发布的能力,解决了发布期间少量流量验证新功能的问题。 很多互联网公司在半夜发布的另外一个重要原因是不具备可灰度能力,新版本存在 bug 或者其它原因会影响线上的客户,无奈之下只能选择在半夜进行发布来减少影响面。 我们知道默认情况下,无论是 Kubernetes 还是 ECS,新老版本都存在的情况下会根据特定的负载均衡算法随机地路由到不同的实例上,随机意味着出问题也会随机出现。我们需要一套动态路由来完成灰度发布的解决方案。 在 RPC 领域,我们称灰度发布为动态路由,动态路由的意思是指流量可以动态地路由到指定的实例上。 动态路由场景 动态路由是微服务里非常核心的功能,流量动态路由意味着可以做非常多的事情。由此衍生出各个场景: 金丝雀发布:只有满足特定规则(比如 Query Parameter、HEADER、COOKIE 中某些 KEY 满足一些条件)或者是固定流量比例的流量才会进入新版本,其它流量都路由到老版本上。 同机房优先路由:当公司规模扩大之后,应用会跨机房部署来达到高可用的目的。由于异地跨机房调用出现的网络延迟问题,需要确保服务消费方能优先调用相同机房的服务消费方,这就需要同机房优先路由的能力。 标签路由:金丝雀发布的新场景。金丝雀发布一般只有新和老两个版本,标签路由可以在线上部署多个版本,每个版本都对于一个标签。 全链路灰度

测试一年多,上线就崩溃!微服务到底应该怎么测试?

霸气de小男生 提交于 2021-01-19 23:52:17
简介: 只有了解风险,才能及时应对,保障服务高可用。 不久前,也就是11月16日,澳大利亚交易所(Australian Securities Exchange, ASX)上线了一个新的交易系统,但因为出现故障而被迫关闭。这是其 2016 年因硬件故障导致休市后最为严重的一次事故。 测试了一年多,结果上线当天就奔溃 11 月 16 日中午,ASX 发布声明表示当天将休市,于次日正常时间重新开放。交易所给出的关闭的原因是“局限于单个交易指令中交易多种证券(组合交易)的软件问题导致了市场数据不准确。” ASX 此次升级的系统是由纳斯达克开发的最新一代交易系统,目前在全球广泛使用。为了保障上线后的安全运行,ASX、技术提供商纳斯达克( Nasdaq )、客户和第三方独立专家已经做了一年多的广泛测试,包括四次彩排。 微服务该如何测试? 看完了热闹,也看看咱们自己的系统。随着以 Spring Cloud、Dubbo 为代表的微服务架构的流行,现在很多企业都采用了微服务架构。随着服务越来越多,这些服务该如何测试?如何防范上面说的系统风险呢? 我们来捋一捋线上系统的风险,然后针对对应的风险来做对应的测试计划。以如下架构为例: 一般来说,一个业务系统的风险来自两处: 其一是 变更带来的风险 ,比如前面提到的新系统上线,或者我们给上图中的购物车服务修一个 bug 等等。 其二是 日常风险

SOFA Weekly | Occlum 发布新版本,Seata QA 整理

自作多情 提交于 2021-01-19 00:08:14
SOFA WEEKLY | 每周精选,筛选每周精华问答 同步开源进展,欢迎留言互动 SOFA Stack( S calable O pen F inancial A rchitecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics 监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,也是在金融场景里锤炼出来的最佳实践。 SOFAStack 官网: https://www.sofastack.tech SOFAStack: https://github.com/sofastack 每周读者问答提炼 欢迎大家向公众号留言提问或在群里与我们互动 我们会筛选重点问题通过 " SOFA WEEKLY " 的形式回复 1 、 吴小彬 提问 请教下,如果分支事务中使用了分库分表中间件(shardingsphere-proxy、mycat 等),Seata-AT 模式是不是不能用的?是只可以用 TCC 模式吗? 现在的 shardingsphereProxy 中间件(不是 shardingsphereJdbc )用 AT 模式,它对微服务来说就是一个 MySQL 连接,它是怎么知道微服务调用链中的

高级开发必须理解的Java中SPI机制

霸气de小男生 提交于 2021-01-17 02:57:50
本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。 1 SPI是什么 SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。 整体机制图如下: Java SPI 实际上是“ 基于接口的编程+策略模式+配置文件 ”组合实现的动态加载机制。 系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。 Java SPI就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。所以SPI的核心思想就是 解耦 。 2 使用场景 概括地说,适用于: 调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略 比较常见的例子: 数据库驱动加载接口实现类的加载 JDBC加载不同类型数据库的驱动 日志门面接口实现类加载 SLF4J加载不同提供商的日志实现类 Spring Spring中大量使用了SPI,比如:对servlet3

从一次问题讨论聊聊我对阅读源码的思考

房东的猫 提交于 2021-01-16 13:23:57
比如本文,没有深度思考的同学,很容易就被表面现象所迷惑,以为问题就此解决,立马关掉文章。但是深度思考的同学就会选择关注肥朝公众号,然后星标置顶,并思考,肥朝为什么能迅速找到这个关键的类呢?这个才是最核心的问题!一定要明白什么叫"解决一个问题"和"解决一类问题"!如果你没有掌握分析问题的方法和技巧,下次遇到其他的注解,你还是解决不了,那又有什么意义? 分析问题 由于肥朝之前写过Dubbo系列的源码解析,公众号也大多是老粉丝,那么我就以Dubbo为例,说下分析问题的思路。当然这个时候喜欢抬杠的同学可能就要反驳了,这个问题不是Springboot的吗,和Dubbo有什么关系?我只能说,优秀的代码,套路思想都基本相同,坑爹的代码,却各有各种不同的坑法。拿Dubbo来分析,并不影响你发现问题的本质! 比如Dubbo中常强调的就是"微核心"、"插件式"。梁飞曾经提过 即然要扩展,扩展点的加载方式,首先要统一, 微核心+插件式,是比较能达到OCP原则的思路,由一个插件生命周期管理容器,构成微核心,核心不包括任何功能,这样可以确保所有功能都能被替换, 并且,框架作者能做到的功能,扩展者也一定要能做到,以保证平等对待第三方, 所以,框架自身的功能也要用插件的方式实现,不能有任何硬编码。 很多同学看完这段一脸懵逼。其实这段话的后半部分是关键 框架作者能做到的功能,扩展者也一定要能做到

spring-cloud-alibaba+nacos整合dubbo

[亡魂溺海] 提交于 2021-01-16 12:53:54
由于spring-cloud的官方核心组件eureka停止升级维护,再加上支持国货,微服务的技术选型spring-cloud-alibaba,注册和服务发现中心,调用服务则选为dubbo,虽然耦合性有点高(指尖银河),但好歹是国货,没说的,必须支持。 小声比比:这类文章比较多,我也跟风一波,凑下热闹 技术栈: spring-boot、spring-cloud-alibaba-nacos、dubbo 首先是nacos nacos是干嘛的呢?简单来说就是服务注册、服务发现、高可用配置中心 首先下载nacos https://github.com/alibaba/nacos/releases 选择1.4版本下载并解压 由于本人技术有限,只配置了nacos单机版,所以此文只叙述nacos的单机模式的相关操作 nacos数据存储 nacos的数据存储有好几种方式,默认用的file方式存储数据,如果要最快速启动的话自然什么也不用改,如果要更换数据存储方式的话则需要修改${nacos}/conf/application.properties文件 db.num = 1 db.url.0 = jdbc:mysql://12.32.12.32:3243/sdfdsf?characterEncoding = utf8 & connectTimeout = 10000 & socketTimeout =

厉害了,Spring Cloud Alibaba 发布 GA 版本!

自古美人都是妖i 提交于 2021-01-16 07:37:13
🐎 小马哥 & Josh Long 🐲 喜欢写一首诗一般的代码,更喜欢和你共同 code review,英雄的相惜,犹如时间沉淀下来的对话,历久方弥新。 相见如故,@杭州。 4 月 18 日,Josh Long 来到了阿里巴巴西溪园区,我们向其演示了 Spring Cloud Alibaba 各个组件的功能和实现方式,Josh Long 看完意犹未尽,表示会在新的 Spring Tips 视频再次介绍 Spring Cloud Alibaba 中的其他组件。(点击文末阅读原文,访问上一期spring-tips-bootiful-alibaba) 画外音:首次遇见,@北京: 我和 Josh Long 的一天 一天后, Spring Cloud Alibaba 发布了首个 GA 版本,此次开发历时 267 天,汇集 26 位 contributor 的努力,覆盖 Spring Cloud Edgware、 Spring Cloud Finchley 和 Spring Cloud Greenwich 3 个版本。 Spring Cloud 联合创始人 Spencer Gibb 在 Spring 官网的博客页面宣布该发板消息。随后,Spring Cloud 官方 Twitter 也发布了此消息 Spring 贺电史: Spring Cloud Alibaba发布第二个版本,Spring