Dubbo

微服务为什么选Spring Cloud?

时间秒杀一切 提交于 2020-12-18 06:59:46
现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性。同时,支持微服务的技术栈也是多种多样的,本系列文章主要介绍这些技术中的翘楚——Spring Cloud。这是序篇,主要讲述我们为什么选择Spring Cloud和它的技术概览。 1、为什么微服务架构需要Spring Cloud 简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享DB、KV,去掉重量级ESB),并且强调DevOps和快速演化。这就要求我们必须采用与一站式时代、泛SOA时代不同的技术栈,而Spring Cloud就是其中的佼佼者。 DevOps是英文Development和Operations的合体,他要求开发、测试、运维进行一体化的合作,进行更小、更频繁、更自动化的应用发布,以及围绕应用架构来构建基础设施的架构。这就要求应用充分的内聚,也方便运维和管理。这个理念与微服务理念不谋而合。 接下来我们从服务化架构演进的角度来看看为什么Spring Cloud更适应微服务架构。点击 这里 查看Spring系列教程集合。 1.1 从使用nginx说起 最初的服务化解决方案是给提供相同服务提供一个统一的域名,然后服务调用者向这个域名发送HTTP请求,由Nginx负责请求的分发和跳转。 这种架构存在很多问题: Nginx作为中间层

[CVE-2020-1948] Apache Dubbo Provider反序列化漏洞复现及分析

邮差的信 提交于 2020-12-18 04:13:19
1、Apache Dubbo Apache Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的 远程方法调用 ,智能容错和负载均衡,以及 服务自动注册和发现 。 对于 dubbo 的源码分析可参考: https://www.anquanke.com/post/id/197658 2 、 CVE-2020-1948 漏洞由 Ruilin 发现,详情可见: https://www.mail-archive.com/dev@dubbo.apache.org/msg06544.html 之前拜读过几篇文章,如研究 Kryo 的 Java “后反序列化漏洞”利用思路:( https://paper.seebug.org/1133/ )。 dubbo 之前的原生反序列化漏洞: https://www.cnblogs.com/zaqzzz/p/12443794.html 。 此次漏洞原理是由于 Apache Dubbo Provider 组件默认使用了 hessian 进行反序列化,并不复杂,所以可以直接使用之前的 hessian 反序列化利用方法: https://paper.seebug.org/1131/ 3、漏洞复现 这里模拟一种攻击场景, demo 选用 springboot 搭建 dubbo 的一个项目: https://github

2020最新,100道电商大厂必问面试题:附完整答案

蹲街弑〆低调 提交于 2020-12-17 15:35:06
2020,可谓是招聘面试最难季。不少大厂,如腾讯、字节的招聘名额明显减少,面试门槛却一再拔高,如果不用心准备,很可能就被面试官怼得哑口无言 。今 天不谈其它,就说说我作为面试官面试的那些事儿。 从某电商项目负责人的算起,再到后来的首席架构师,我前前后后面试了至少 300 多位求职者。 不敢说成功入职的每个同事都发展得特别好,但大部分人来说还是很不错的。 过硬的技术功底是最起码的考核要求。 不少来应聘的朋友底子还是有的,但知识面太窄了。 那么对于互联网大厂,尤其是电商行业来说,都会重点考核哪些呢?最近 我将这些年自己常问的考核知识整理了一下 ,不下 100 道 ,其中涵盖了不少大厂必考点、高频点、加薪点,这些也是作为开发人来说日常项目中经常遇到的踩坑点。 为了方便大家,我把这些点做了一个归类,一共分成了 5 大类,分别是: Dubbo,ElasticSearch,JVM,多线程/高并发,消息中间件 。我把关于这些问题的拆解与思考,整理成一个 pdf,限于篇幅,这里就不一一列出了。 需要的同学可以文末扫码领取,希望能从中有所启发、收获。 这里先罗列出近三年部分技术考核点,具体有: ## 1 Dubbo 1.1 服务调用超时问题怎么解决? 1.2 Dubbo支持哪些序列化方式? 1.3 Dubbo和SpringCloud的关系? 1.4 Dubbo的架构设计?一共划分了哪些层? 1.5

喧哗的背后:Serverless 的概念及挑战

我是研究僧i 提交于 2020-12-17 04:22:14
作者 | 许晓斌 阿里云高级技术专家,目前负责阿里集团 Serverless 研发运维平台建设,《Maven 实战》作者,曾经是 Maven 中央仓库的维护者。 **导读:**本文作者作为阿里集团 Serverless 研发运维平台负责人,从应用架构的角度去分析 Serverless 为何会让那么多人着迷,它的核心概念究竟是什么,并总结了一些落地 Serverless 必然会面临的问题。 前言 我曾在 《Serverless 的喧哗与骚动》 一文中对 Serverless 今天在行业中所处的状态做了一个比喻,这个比喻是这么说的: Serverless is like teenage sex: Everyone talks about it, nobody really knows how to do it, everyone thinks everyone else is doing it, so everyone claims they are doing it. 虽然距离写那篇文章已经过去了半年的时间,但是这种状态在我看来其实没有发生太大的变化,有很多的一线研发或者管理者对 Serverless 技术的理解是非常片面的,有些甚至是错误的。如果缺乏对应用架构演进的理解,缺乏对于云基础设施能力的理解,缺乏对风险的判断,盲目的上新技术可能不仅无法兑现业务价值,浪费精力

在Ubuntu中添加诸如zookeeper这样的service

房东的猫 提交于 2020-12-17 01:20:47
我们总是想着把自己的应用在系统启动时自动启动,但是我们又不会写 init.d 中的 shell 脚本,所以,很多时候很无奈地只能手动。现在好了,我们有了 systemd 这样的东东,我们就很容易把事情给办了。 我们先了解一下 systemd : 启动服务: $ sudo service zookeeper start 重启服务: $ sudo service zookeeper restart 关闭服务: $ sudo service zookeeper stop 是不是很熟悉,看起来很不错的样子。 那么我们怎么把诸如 zookeeper 这样的程序加进 systemd 中呢? 首先,我们很了解一下 systemd 的配置放在哪里,一般情况下会在 /etc/systemd/system 中,在这个目录中,会有大量的 wants 和 service 。 其中 wants 表示依赖的基础服务,这些我们不用去管它。 而 service 则是要启动的应用服务,这些才是我们去关注的。一般情况下,每个要启动的服务都会以服务名加 .service 结尾,例如: zookeeper.service redis.service 每个 .service 文件用来配置一个 service ,它们是一个文本文件,格式为 properties ,下面就是一个 zookeeper.service 的例子:

写代码有这16个好习惯,可以减少80%非业务的bug

混江龙づ霸主 提交于 2020-12-16 15:28:00
前言 每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~ github地址,感谢每颗star ❝ https://github.com/whx123/JavaHome ❞ 公众号: 「捡田螺的小男孩」 1. 修改完代码,记得自测一下 「改完代码,自测一下」 是每位程序员必备的基本素养。尤其不要抱有这种侥幸 「心理:我只是改了一个变量或者我只改了一行配置代码,不用自测了」 。改完代码,尽量要求自己都去测试一下哈,可以规避很多不必要bug的。 2. 方法入参尽量都检验 入参校验也是每个程序员必备的基本素养。你的方法处理, 「必须先校验参数」 。比如入参是否允许为空,入参长度是否符合你的预期长度。这个尽量养成习惯吧,很多 「低级bug」 都是 「不校验参数」 导致的。 ❝ 如果你的数据库字段设置为varchar(16),对方传了一个32位的字符串过来,你不校验参数, 「插入数据库直接异常」 了。 ❞ 3. 修改老接口的时候,思考接口的兼容性。 很多bug都是因为修改了对外老接口,但是却 「不做兼容导致」 的。关键这个问题多数是比较严重的,可能直接导致系统发版失败的。新手程序员很容易犯这个错误哦~ 所以,如果你的需求是在原来接口上修改,,尤其这个接口是对外提供服务的话,一定要考虑接口兼容

写代码有这16个好习惯,可以减少80%非业务的bug

99封情书 提交于 2020-12-16 15:27:30
前言 每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~ 1. 修改完代码,记得自测一下 「改完代码,自测一下」 是每位程序员必备的基本素养。尤其不要抱有这种侥幸 「心理:我只是改了一个变量或者我只改了一行配置代码,不用自测了」 。改完代码,尽量要求自己都去测试一下哈,可以规避很多不必要bug的。 2. 方法入参尽量都检验 入参校验也是每个程序员必备的基本素养。你的方法处理, 「必须先校验参数」 。比如入参是否允许为空,入参长度是否符合你的预期长度。这个尽量养成习惯吧,很多 「低级bug」 都是 「不校验参数」 导致的。 ❝ 如果你的数据库字段设置为varchar(16),对方传了一个32位的字符串过来,你不校验参数, 「插入数据库直接异常」 了。 ❞ 3. 修改老接口的时候,思考接口的兼容性。 很多bug都是因为修改了对外老接口,但是却 「不做兼容导致」 的。关键这个问题多数是比较严重的,可能直接导致系统发版失败的。新手程序员很容易犯这个错误哦~ 所以,如果你的需求是在原来接口上修改,,尤其这个接口是对外提供服务的话,一定要考虑接口兼容。举个例子吧,比如dubbo接口,原本是只接收A,B参数,现在你加了一个参数C,就可以考虑这样处理。 //老接口 void oldService

2020年,阿里内推Java后端面试题,文末附面试福利。

穿精又带淫゛_ 提交于 2020-12-16 13:57:49
阿里一面题目: osi七层网络模型,五层网络模型,每次层分别有哪些协议 死锁产生的条件, 以及如何避免死锁,银行家算法,产生死锁后如何解决 如何判断链表有环 虚拟机类加载机制,双亲委派模型,以及为什么要实现双亲委派模型 虚拟机调优参数 拆箱装箱的原理 JVM垃圾回收算法 CMS G1 hashset和hashmap的区别,haspmap的底层实现put操作,扩容机制,currenthashmap如何解决线程安全,1.7版本以及1.8版本的不同 md5加密的原理 有多少种方法可以让线程阻塞,能说多少说多少 synchronized和reetrantlock锁 AQS同步器框架,countdowmlatch,cyclebarrier,semaphore,读写锁 阿里二面题目: B-Tree索引,myisam和innodb中索引的区别 BIO和NIO的应用场景 讲讲threadlocal 数据库隔离级别,每层级别分别用什么方法实现,三级封锁协议,共享锁排它锁,mvcc多版本并发控制协议,间隙锁 数据库索引?B+树?为什么要建索引?什么样的字段需要建索引,建索引的时候一般考虑什么?索引会不会使插入、删除作效率变低,怎么解决? 数据库表怎么设计的?数据库范式?设计的过程中需要注意什么? 共享锁与非共享锁、一个事务锁住了一条数据,另一个事务能查吗? Spring bean的生命周期

写代码有这16个好习惯,可以减少80%非业务的bug

梦想与她 提交于 2020-12-16 13:53:50
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者丨捡田螺的小男孩 来源丨捡田螺的小男孩 前言 每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~ github地址,感谢每颗star ❝ https://github.com/whx123/JavaHome ❞ 1. 修改完代码,记得自测一下 「改完代码,自测一下」 是每位程序员必备的基本素养。尤其不要抱有这种侥幸 「心理:我只是改了一个变量或者我只改了一行配置代码,不用自测了」 。改完代码,尽量要求自己都去测试一下哈,可以规避很多不必要bug的。 2. 方法入参尽量都检验 入参校验也是每个程序员必备的基本素养。你的方法处理, 「必须先校验参数」 。比如入参是否允许为空,入参长度是否符合你的预期长度。这个尽量养成习惯吧,很多 「低级bug」 都是 「不校验参数」 导致的。 ❝ 如果你的数据库字段设置为varchar(16),对方传了一个32位的字符串过来,你不校验参数, 「插入数据库直接异常」 了。 ❞ 3. 修改老接口的时候,思考接口的兼容性。 很多bug都是因为修改了对外老接口,但是却 「不做兼容导致」 的

分布式架构的演进

本秂侑毒 提交于 2020-12-16 06:54:14
系统架构演化历程-初始阶段架构 初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP特征:应用程序、数据库、文件等所有的资源都在一台服务器上。描述:通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。 系统架构演化历程-应用服务和数据服务分离 好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver特征:应用程序、数据库、文件分别部署在独立的资源上。描述:数据量增加,单台服务器性能及存储空间不足,需要将应用和数据分离,并发处理能力和数据存储空间得到了很大改善。 系统架构演化历程-使用缓存改善性能 特征:数据库中访问较集中的一小部分数据存储在缓存服务器中,减少数据库的访问次数,降低数据库的访问压力。描述:系统访问特点遵循二八定律,即80%的业务访问集中在20%的数据上。缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况。 系统架构演化历程-使用应用服务器集群 在做完分库分表这些工作后,数据库上的压力已经降到比较低了,又开始过着每天看着访问量暴增的幸福生活了,突然有一天