Dubbo

eShopOnContainers 知多少[11]:服务间通信之gRPC

删除回忆录丶 提交于 2020-08-15 11:32:04
引言 最近翻看最新3.0 eShopOncontainers源码,发现其在架构选型中补充了 gRPC 进行服务间通信。那就索性也写一篇,作为系列的补充。 gRPC 老规矩,先来理一下gRPC的基本概念。gRPC是Google开源的RPC框架,比肩dubbo、thrift、brpc。其优势在于: 1. 基于proto buffer:二进制协议,具有高性能的序列化机制。相较于JSON(文本协议)而言,首先从数据包上就有60%-80%的减小,其次其解包速度仅需要简单的数学运算完成,无需复杂的词法语法分析,具有8倍以上的性能提升。 2. 支持数据流。 3. 基于proto 文件:可以更方便的在客户端和服务端之间进行交互。 4. gRPC语言无关性: 所有服务都是使用原型文件定义的。这些文件基于protobuffer语言,并定义服务的接口。基于原型文件,可以为每种语言生成用于创建服务端和客户端的代码。其中protoc编译工具就支持将其生成C #代码。从.NET Core 3 中,gRPC在工具和框架中深度集成,开发者会有更好的开发体验。 gRPC 在 eShopOncontainers 的应用 首先来理一下eShopOncontainers 中服务间同步通信的技术选型,主要还是是基于HTTP/REST,gRPC作为补充。 在eShopOncontainers中Ordering API

Java学到什么程度可以出去实习?

偶尔善良 提交于 2020-08-15 09:58:10
  Java学成什么样子可以出去实习?主要还是看公司需求!   公司类型,规模,对Java程序员的需求的多少,对Java程序员的不同要求,都决定了你学成什么样子可以实习!   但Java基础,数据库,前端,Java web,框架等都是需要有一定的掌握的。如果有项目经验,找工作会更好。当然,如果有更深层次的分布式架构、服务器虚拟化技术、企业开发解决方法等知识,能更好的找到工作哦!   如果你想找工作,下面这套2020年Java中高级程序员学习线路图能帮到你!   一、Java基础   JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。   在Java基础板块中有6个子模块的学习:   1.基础语法,可帮助你建立基本的编程逻辑思维;   2.面向对象,以对象方式去编写优美的Java程序;   3.集合,后期开发中存储数据必备技术;   4.IO,对磁盘文件进行读取和写入基础操作;   5.多线程与并发,提高程序效率;   6.异常,编写代码逻辑更加健全;   7.网络编程,应用服务器学习基础,完成数据的远程传输。   8.学习该阶段,可以完成一些简单的管理系统、坦克大战游戏、QQ通信等。   二、数据库   数据库不仅仅是Java开发工程师的必学课程,也是其他语言都需要掌握的技能。用于对交互过程中客户的数据进行存储。  

consul、eureka、nacos对比

好久不见. 提交于 2020-08-15 09:22:16
consul、eureka、nacos对比 配置中心 eureka 不支持 consul 支持 但用起来偏麻烦,不太符合springBoot框架的命名风格,支持动态刷新 nacos 支持 用起来简单,符合springBoot的命名风格,支持动态刷新 注册中心 eureka 依赖:依赖ZooKeeper 应用内/外:直接集成到应用中,依赖于应用自身完成服务的注册与发现, ACP原则:遵循AP(可用性+分离容忍)原则,有较强的可用性,服务注册快,但牺牲了一定的一致性。 版本迭代:目前已经不进行升级 集成支持:只支持SpringCloud集成 访问协议:HTTP 雪崩保护:支持雪崩保护 界面:英文界面,不符合国人习惯 上手:容易 consul 依赖:不依赖其他组件 应用内/外:属于外部应用,侵入性小 ACP原则:遵循CP原则(一致性+分离容忍) 服务注册稍慢,由于其一致性导致了在Leader挂掉时重新选举期间真个consul不可用。 版本迭代:目前仍然进行版本迭代 集成支持:支持SpringCloud K8S集成 访问协议:HTTP/DNS 雪崩保护:不支持雪崩保护 界面:英文界面,不符合国人习惯 上手:复杂一点 nacos 依赖:不依赖其他组件 应用内/外:属于外部应用,侵入性小 ACP原则:通知遵循CP原则(一致性+分离容忍) 和AP原则(可用性+分离容忍) 版本迭代

最强Dubbo面试题,附带超级详细答案

送分小仙女□ 提交于 2020-08-15 07:29:05
最强面试题推荐: 2020Java面试题及答案,命中率高达90% 1.Dubbo是什么? Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成。 RPC 指的是远程调用协议,也就是说两个服务器交互数据。 2.Dubbo的由来? 互联网的快速发展,Web应用程序的规模不断扩大,一般会经历如下四个发展阶段。 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起即可。 垂直应用架构 当访问量逐渐增大,单一应用按照有业务线拆成多个应用,以提升效率。 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。 分布式服务架构 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。 流动计算架构 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。 此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。 3.Dubbo的主要应用场景? 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 软负载均衡及容错机制

REST和RPC简介和区别

血红的双手。 提交于 2020-08-15 06:26:54
参考文章: REST和RPC是什么东东?两者有什么区别 【架构师】微服务架构--REST与RPC Rest和RPC接口区别 1 REST与RPC概念 什么是REST REST是一种架构风格,指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。REST规范把所有内容都视为资源,网络上一切皆资源。 REST并没有创造新的技术,组件或服务,只是使用Web的现有特征和能力。 可以完全通过HTTP协议实现,使用 HTTP 协议处理数据通信。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。 HTTP动词与REST风格CRUD对应关系: 什么是RPC 远程方法调用,就是像调用本地方法一样调用远程方法。常见RPC框架结构图: RPC框架要做到的最基本的三件事: 1、服务端如何确定客户端要调用的函数; 在远程调用中,客户端和服务端分别维护一个【ID->函数】的对应表, ID在所有进程中都是唯一确定的。客户端在做远程过程调用时,附上这个ID,服务端通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。 2、如何进行序列化和反序列化; 客户端和服务端交互时将参数或结果转化为字节流在网络中传输,那么数据转化为字节流的或者将字节流转换成能读取的固定格式时就需要进行序列化和反序列化

Java读源码之Netty深入剖析学习(一)

五迷三道 提交于 2020-08-15 04:16:12
Dubbo、Rocket MQ底层都是用了Netty应用框架 服务端: public class ServerBoot { private static final int PORT = 8000; public static void main(String[] args) { Server server = new Server(PORT); server.start(); } } public class Server { private ServerSocket serverSocket; public Server(int port) { try { this.serverSocket = new ServerSocket(port);//相当于服务器启动了,并且监听了端口号port System.out.println("服务端启动成功,端口:" + port); } catch (IOException exception) { System.out.println("服务端启动失败"); } } public void start() { new Thread(new Runnable() { @Override public void run() { doStart(); } }).start(); } private void doStart() { while

纯手打!字字珠玑!cookie,token,session/接口测试和面试官扯得明明白白!

烈酒焚心 提交于 2020-08-15 04:01:33
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请求的请求类型有哪几种? • application/json json字符串 • • application/x-www-from-urlencoded 表单传递 • • multipart/form-data 主要用于上传文件 • 5、cookie和session的区别 • cookie数据存放在客户的浏览器上,session数据放在服务器上 • • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session • •

Dubbo远程调用之公司内部提供的服务

ⅰ亾dé卋堺 提交于 2020-08-15 03:40:28
公司内部提供的服务 一家对外提供服务的公司,例如百度,腾讯,阿里,京东,58 同城等,公司内部有多个事业群,事业部门,每个事业部门内部又有若干个子部门,子部门里面有多个不同的小组负责各自的业务。提供对外的服务。 公司内部,外部提供的服务不仅多,而且细分,还有交叉的情况。前面的例子是访问互联网上的服务,使用的是 http 请求网络资源。相对来说访问服务方式单一,处理服务的效率相对较低。公司内部服务之间可以使用多种不同的方式访问服务。 使用单一应用访问天气服务 图一: 图二: A、新建 web 项目 01- 项目结构: B、 新建数据类 重写 toString() C、 定义 Service 接口 D、定义 Service 接口的实现类 E、 定义 Servlet,提供访问地址 F、 定义访问添加服务的 首先加入 jQuery 库文件,放到项目的 js 目录 index.jsp G、执行 web 应 使用独立应用提供天气服务 (1)独立的应用提供服务 在一台或多台物理机器上,运行的独立应用程序,供多个客户端访问天气服务。 A、把 01-weatherService 应用复制,名称 02-companyProviderWeather B、 去掉 js 文件夹,index.jsp 文件 C、 使用 Servlet 提供服务 (2)在独立的应用中访问天气服务 在一台独立的计算上,

999页阿里P7Java学习笔记在互联网上火了,完整版开放下载

孤街醉人 提交于 2020-08-15 03:11:27
笔记作者:来自于阿里P8级架构师: Mark 笔记特点:条理清晰,含图像化表示更加易懂。 内容概要:包括 Java 集合、JVM、多线程、并发编程、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat等大厂面试题等、等技术栈! 由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。 JAVA集合 接口继承关系和实现 List ArrayList(数组) Vector(数组实现、线程同步) LinkList(链表) Set HashSet(Hash表) TreeSet(二叉树) JVM JVM就是java虚拟机,它是一个虚构出来的计算机,可在实际的计算机上模拟各种计算机的功能。JVM有自己完善的硬件结构,例如处理器、堆栈和寄存器等,还具有相应的指令系统。 线程 JVM内存区域 JVM运行时内存 垃圾回收与算法 JAVA 四种引用类型 GC分代收集算法 VS 分区收集算法 GC垃圾收集器 JAVA IO/NIO JVM 类加载机制 JAVA多线程并发 JAVA并发知识库 JAVA线程实现/创建方式 4种线程池 线程生命周期(状态) 终止线程4种方式 sleep与wait 区别

聊聊dubbo-go的TpsLimitFilter

拥有回忆 提交于 2020-08-15 02:03:12
序 本文主要研究一下dubbo-go的TpsLimitFilter TpsLimitFilter dubbo-go-v1.4.2/filter/filter_impl/tps_limit_filter.go const ( // TpsLimitFilterKey key TpsLimitFilterKey = "tps" ) func init() { extension.SetFilter(TpsLimitFilterKey, GetTpsLimitFilter) } type TpsLimitFilter struct { } TpsLimitFilter的init设置了GetTpsLimitFilter GetTpsLimitFilter dubbo-go-v1.4.2/filter/filter_impl/tps_limit_filter.go // GetTpsLimitFilter ... func GetTpsLimitFilter() filter.Filter { return &TpsLimitFilter{} } GetTpsLimitFilter实例化TpsLimitFilter Invoke dubbo-go-v1.4.2/filter/filter_impl/tps_limit_filter.go // Invoke ... func (t