Dubbo

微服务的理想与现实

♀尐吖头ヾ 提交于 2020-08-11 01:00:13
随着云原生微服务的日益火热,很多人都开始对微服务的相关知识内容感兴趣。本篇内容,旨在扫盲(意思是小白可入),希望能对大家有帮助。如有问题,欢迎大家一起讨论,共同学习进步。 01 微服务从哪里来?--- 服务架构的演进史 互联网初期, 2G还是个时髦词儿,人们的需求也很朴实,一个静态网站告诉大家我是谁、一个留言板让大家能够与我联系,就能满足信息传播和互相交流的需要。于是码农们给我们提供了这样一套解决方案: 界面+业务处理+数据处理 ,通过一个zip包就可完成所有的事情,这也就是服务架构的 单体架构时代 。 图片为作者原创 随着3G的普及,越来越多的人们可以通过PC上网了,此时BBS、门户咨询网站的出现开始吸引着大量观众。当漂亮的交互更能抓人眼球、有趣的信息瞬间引爆千万用户在线围观时,“并发“问题产生了,于是码农们加班奋战,将系统分为前端和后端,通过拆分出可复用的中间件,来提升业务处理能力、解决并发问题,这便是 分层架构时代的到来 。 图片为作者原创 后来,互联网进入微博时代,几乎网民都有Blog,打开手机就刷weibo。而此时的分层架构面对更复杂服务要求时,在应用扩展、服务调用、扩容等方面都越发桎梏,于是服务架构走进了面向服务的架构(SOA)时代。SOA网上说的很多,这里列举几个关键词: 中心化的服务治理, ESB(企业服务总线)中心化、服务之间通过精确定义的接口进行通讯、耦合度更低

为了控制Bean的加载我使出了这些杀手锏

别等时光非礼了梦想. 提交于 2020-08-11 00:17:28
故事一:绝代有佳人,幽居在空谷 美女同学小张,在工作中遇到了烦心事。心情那是破凉破凉的,无法言喻。 故事背景是最近由于需求变动,小张在项目中加入了 MQ 的集成,刚开始还没什么问题,后面慢慢问题的显露出来了。 自己在本地 Debug 的时候总是能消费到消息,由于历史原因,公司的项目只区分了两套环境,也就是测试和线上。本地启动默认就是测试环境,所以会消费测试环境的消息。 MQ 的配置代码如下: @Configuration public class MqConfig { @Bean(initMethod = "start", destroyMethod = "shutdown") public ConsumerBean consumerBean() { // .... } } 想要解决小张的问题,那么就必须得有第三个环境的区分,也就是增加一个本地开发环境,然后通过环境来决定是否需要初始化 MQ。 这个时候就可以用到 Spring Boot 为我们提供的 Conditional 家族的注解了,@Conditional 注解会根据具体的条件决定是否创建 bean 到容器中, 如下图: 通过@ConditionalOnProperty 来决定 MqConfig 是否要加载,@ConditionalOnProperty 的 name 就是配置项的名称,havingValue 就是匹配的值

长话短说,阿里云原生团队招人,急

梦想与她 提交于 2020-08-10 20:08:54
我们在找谁? 毕业时间为 2020 年 11 月- 2021-10 月海内外高校的全日制本科、硕士、博士 。 计算机、数学、电子工程、通信等相关专业; 具备扎实的数据结构和计算机系统基础,精通一种开发语言; 对基础软件充满热情,具备较好的动手能力和技术热情,有成功的研究型或实战型项目技术成果落地者优先; 关注开源技术,有开源贡献者优先。 下面跟你说说阿里云那么多团队,为什么你要来云原生团队。 这里,有你听说过的大佬 这里,有你听说过的项目 云原生团队诞生了 Apache RocketMQ、Apache Dubbo、Spring Cloud Alibaba、Nacos、Seata、Arthas 等开源项目。 Apache 顶级项目就有两个! 2020 年阿里巴巴开源编程之夏 20 个参与项目,其中有 10 个来自云原生团队! 我们每年都会举办中间件技术挑战赛,邀请业界各路大牛切磋技艺,今年有 1 万个开发者参与! 这里是阿里“技术中台”的发源地,我们服务了许多阿里以外的知名互联网企业,我们为许多龙头企业提供了微服务相关的最佳实践和解决方案,帮助许多传统企业完成了数字化转型。 在这里,你能够全面提升你的个人技术影响力、沟通能力和行业知名度。 这里,有独一无二的场景 作为阿里核心的技术部门之一,我们是整个集团技术的“底座”,我们的产品向上支撑了淘宝、天猫、盒马、菜鸟

面试官:没搞懂接口测试这些点,哪里来的自信投简历?

梦想的初衷 提交于 2020-08-10 19:37:26
1,目前市面上流行的接口大多有哪几种协议的接口? 答:http,https,dubbo,rpc等即可。 2,接口的请求方式有哪几种? 答:get,post,put,delete,head,Trace,opions等,大多以get和post请求为主 3、get和post区别是什么? 答:POST和GET都是向服务器提交数据,并且都会从服务器获取数据。 区别: (1)传送方式:get通过地址栏传输,post通过报文传输,故而post更相对来说私密性一点 (2)传送长度:get参数有长度限制(受限于url长度),而post无限制 (3)get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留 (4)get方式大多用作查询接口,获取响应数据;而post方式更多做数据添加、修改或删除等操作 4,post请求的请求类型有哪几种? [if !supportLists]· [endif] application/json json字符串 [if !supportLists]· [endif] [if !supportLists]· [endif] application/x-www-from-urlencoded 表单传递 [if !supportLists]· [endif] [if !supportLists]· [endif] multipart/form-data

【SpringCloud】Spring Cloud Alibaba 及 Nacos介绍(二十六)

↘锁芯ラ 提交于 2020-08-10 18:47:38
Spring Cloud Alibaba介绍   Spring Cloud Alibaba为分布式应用程序开发提供了一站式解决方案。它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用Spring Cloud开发应用程序。   使用Spring Cloud Alibaba,您只需要添加一些注释和少量配置即可将Spring Cloud应用程序连接到Alibaba的分布式解决方案,并使用Alibaba中间件构建分布式应用程序系统。   官网: https://spring.io/projects/spring-cloud-alibaba 特征 流量控制和服务降级 :使用Sentinel进行流量控制,断路和系统自适应保护。 服务注册和发现 :实例可以在Nacos中注册,客户可以使用Spring管理的bean发现实例。 支持通过Spring Cloud Netflix的客户端负载均衡器Ribbon。 分布式配置 :使用Nacos作为数据存储 事件驱动 :构建与Spring Cloud Stream RocketMQ Binder连接的高度可扩展的事件驱动微服务 消息总线 :使用Spring Cloud Bus RocketMQ链接分布式系统的节点 分布式事务 :支持高性能且易于使用的Seata分布式事务解决方案 Dubbo RPC :通过 Dubbo RPC 扩展Spring

Sentinel Go 0.4.0 发布,支持热点流量防护能力

天大地大妈咪最大 提交于 2020-08-10 18:15:20
Sentinel 是阿里巴巴开源的,面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统自适应保护等多个维度来帮助开发者保障微服务的稳定性。Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀、冷启动、消息削峰填谷、集群流量控制、实时熔断下游不可用服务等,是保障微服务高可用的利器,原生支持 Java/Go/C++ 等多种语言,并且提供 Istio/Envoy/SOFA MOSN 全局流控支持来为 Service Mesh 提供高可用防护的能力。 近期, Sentinel Go 0.4.0 正式发布,带来了 热点参数流控特性 ,可以自动识别统计传入参数中的“热点”参数值并分别进行流控,对于防刷、热点商品访问频次控制等场景非常有用,是高可用流量防护中重要的一环。下面我们来了解一下热点参数流控的场景和原理。 热点流量防护介绍 流量是随机的,不可预测的。为了防止被大流量打垮,我们通常会对核心接口配置限流规则,但有的场景下配置普通的流控规则是不够的。我们来看这样一种场景——大促峰值的时候,总是会有不少“热点”商品,这些热点商品的瞬时访问量非常高。一般情况下,我们可以事先预测一波热点商品,并对这些商品信息进行缓存“预热”,以便在出现大量访问时可以快速返回而不会都打到 DB 上。但每次大促都会涌现出一些“黑马”商品,这些“黑马

非常接地气的架构和分层方法,值得学习!

不打扰是莪最后的温柔 提交于 2020-08-10 17:59:28
作者:咖啡拿铁 https://juejin.im/post/5b44e62e6fb9a04fc030f216 1、背景 说起应用分层,大部分人都会认为这个不是很简单嘛 就controller,service, mapper三层。 看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,controller做的逻辑比service还多,service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无法复用,层级关系混乱,对后续代码的维护非常麻烦。 的确在这些人眼中分层只是一个形式,前辈们的代码这么写的,其他项目代码这么写的,那么我也这么跟着写。但是在真正的团队开发中每个人的习惯都不同,写出来的代码必然带着自己的标签。 有的人习惯controller写大量的业务逻辑,有的人习惯在service中之间调用远程服务,这样就导致了每个人的开发代码风格完全不同,后续其他人修改的时候,一看,我靠这个人写的代码和我平常的习惯完全不同,修改的时候到底是按着自己以前的习惯改,还是跟着前辈们走,这又是个艰难的选择,选择一旦有偏差,你的后辈又维护你的代码的时候,恐怕就要骂人了。 所以一个好的应用分层需要具备以下几点: 方便后续代码进行维护扩展; 分层的效果需要让整个团队都接受; 各个层职责边界清晰。 2、如何进行分层 2.1、阿里规范

每天进步一点点:“JVM性能调优解析”,分享JVM进阶面试题77问!

空扰寡人 提交于 2020-08-10 17:31:53
前言 Java虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统。 Java虚拟机本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“一次编译,多次运行”。 Java虚拟机不仅是一种跨平台的软件,而且是一种新的网络计算平台。该平台包括许多相关的技术,如符合开放接口标准的各种API、优化技术等。Java技术使同一种应用可以运行在不同的平台上。Java平台可分为两部分,即Java虚拟机(Java virtual machine,JVM)和Java API类库。 分享详细解析77道Java面试时常问的JVM题,希望对各位有所帮助,另外我针对当前互联网面试总结一些资料给大家,文末有领取方式(诚意满满) 由于文章篇幅问题,我这里就不一一解析了,需要获取全部答案解析的可以 关注公众号【风平浪静如码】获取文档! 1、java中会存在内存泄漏吗,请简单描述。 2、64 位 JVM 中,int 的长度是多数? 3、Serial 与 Parallel GC 之间的不同之处? 4、32 位和 64 位的 JVM,int 类型变量的长度是多数? 5、Java 中 WeakReference 与

Dubbo2.7.7 反序列化漏洞绕过分析

陌路散爱 提交于 2020-08-10 16:50:50
作者:freddychi(迟长峰)@腾讯安全云鼎实验室 公众号: https://mp.weixin.qq.com/s/jKM-Z2BTFfk_Ro1rJAxg5w 北京时间2020-6-22日Apache官方发布了Dubbo 2.7.7版本,其中修复了一个严重的远程代码执行漏洞(CVE-2020-1948),这个漏洞是由腾讯安全玄武实验室的ruilin提交,该漏洞允许攻击者使用任意的服务名和方法名发送RPC请求,同时将恶意序列化参数作为有效载荷,当恶意序列化的参数被反序列化时将执行恶意代码。该漏洞与 CVE-2017-3241 RMI反序列化漏洞有点类似,都是在远程调用过程中通过方法参数传入恶意序列化对象,服务端在解析参数进行反序列化时触发。Dubbo Github Star数量32.8k,知名度不亚于fastjson,被大量企业使用,包括一些知名互联公司,漏洞影响十分广泛。 补丁分析 从补丁对比文件来看,在DecodeableRpcInvocation.java文件133-135行增加了对Method方法进行验证,如果验证不通过则抛出非法参数异常终止程序运行,核心代码代码如下: if (!RpcUtils.isGenericCall(path, this.getMethodName()) && !RpcUtils.isEcho(path, this.getMethodName(

SpringBoot中使用dubbo实现RPC调用

房东的猫 提交于 2020-08-10 16:38:48
Dubbo(来自于阿里巴巴) Dubbo是一个分布式服务框架,致力于提供高性能和透明化的PRC远程调用服务调用方案。 Dubbo的的特点 通过spring配置的方式即可完成服务化,对于应用无入侵。(SpringCloud有一定的入侵) 通过maven的install &deploy命令把interface和Model层发布到仓库中,服务调用方只需要依赖interface和model层即可。 通过zookeeper设置达到注册服务和心跳检测,通过gateWay前置网关(Clound使用Zuul实现负载均衡将请求转向Eureka服务器)隔绝外部直接调用原子服务的风险 SpringBoot中使用Dubbo 引入依赖 < ! -- dubbo依赖 -- > < dependency > < groupId > com . alibaba < / groupId > < artifactId > dubbo < / artifactId > < version > 2.6 .6 < / version > < / dependency > < dependency > < groupId > org . apache . curator < / groupId > < artifactId > curator - framework < / artifactId > < version >