Dubbo

这份书单,想要晋级高级Java工程师的朋友值得一看!

时光毁灭记忆、已成空白 提交于 2020-07-24 18:44:39
点击蓝色“程序员书单”关注我哟 加个“星标”,每天带你读好书! ​ 经过了10多年的发展,Java Web从开发框架到社区都已经非常成熟,很多程序员都可以通过使用框架很快速地搭建起一个Java Web应用,特别是近几年SpringBoot大热,干脆连配置都不需要了解了,直接一键式编译部署运行,让Java工程师的入门成本变得越来越低。 但于此同时,互联网公司对于Java的应用场景也在不断地升级换代,从单机部署再到分布式,从SOA再到微服务,Java后端技术栈变得更加庞大,对于工程师的要求也越来越高,特别是对于大公司来说更是如此,也正因为如此,对Java工程师的考察已经不限于Java Web的那套东西了,企业往往会提出更高的要求,比如需要你能够熟练使用设计模式,了解Java并发编程和JVM调优,甚至是了解分布式技术、微服务以及中间件等等。 今天的这份书单并不针对某一种技术,而是想介绍一些一些Java进阶方面的书籍,其中包括Java的一些编码规范,代码最佳实践,以及调优指南,另外还介绍了一些Java编程的黑科技,比如Java异步编程,相信这些书籍对你的Java进阶学习会有所帮助。 Java进阶系列书单 ​ 阿里巴巴Java开发手册 《阿里巴巴Java开发手册》的愿景是码出高效,码出质量。它结合作者的开发经验和架构历程,提炼阿里巴巴集团技术团队的集体编程经验和软件设计智慧

Docker学习笔记

≯℡__Kan透↙ 提交于 2020-07-24 13:55:55
cc老师最新一期的高级架构师课程终于确定日期了,7月6号正式开课,现在618活动,三天限时折扣中6800一人不限时免费更新课程是最大的卖点,里面包含了现在主流的架构,以及最新的技术,据说从理论到运用全部带着做,像现在面试常用的 Netty, Redis, Kafka,Zookeeper, Dubbo, Nginx + openResty + kong + Lua, ElasticSearch等技术都深入源码层级,对于有想跟我一样有着像提高自身技术的同学,课程的详情都在私塾的首页详细说明了,感兴趣的小伙伴,可以一起去 【 私塾在线 】 学习 容器卷管理 简介 Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。 为了能保存数据,我们使用卷。 数据卷 卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性: 数据卷可在容器之间共享或重用数据 卷中的更改可以直接生效 数据卷中的更改不会包含在镜像的更新中 数据卷的生命周期一直持续到没有容器使用它为止 增加数据卷 在docker run 时,使用 –v 路径,例如: -v /tmp/data,这就会在容器的/tmp

再启程,Service Mesh 前路虽长,尤可期许

自古美人都是妖i 提交于 2020-07-24 13:33:04
前言 几乎所有人都在说 Service Mesh;貌似没人知道怎么落地 Service Mesh;但是大家都觉得其他人在大力做 Service Mesh;所以大家都宣称自己在做 Service Mesh。 上面只是开一个玩笑,但是从某种程度反映了一些实际情况:Service Mesh 是一种设计思想和理念,而不是具体的架构或者实现方式,虽然 Istio+Envoy 的配置似乎已经成了事实标准,当我们环顾四周,却发现理想太丰满,现实太骨感,因为各企业当前切实原因,导致各种形态的 Service Mesh 百花齐放。 蚂蚁金服的 Service Mesh 就属于上面提到的百花齐放中的一员,我们已经渡过探索期,全面进入生产应用。去年的双十一完成了交易支付核心链路,几十万容器规模的生产级验证。但是业界对于 Service Mesh 仍然有很多种不同的声音,一方面是众星捧月式的支持,另一方面是困惑和质疑,包括对价值、架构以及性能的质疑。那么我们对此是什么态度?双十一深度实践之后蚂蚁金服的 Service Mesh 路又在何方?Service Mesh 架构是终点吗? 本文将结合蚂蚁金服内部实际场景以及思考,讲述继 2019 双十一之后,蚂蚁金服在 Service Mesh 路上的规划和持续演进。 蚂蚁金服 Service Mesh 实践回顾 上图是 2019 年蚂蚁金服双十一的实践架构

手动造轮子——基于.NetCore的RPC框架DotNetCoreRpc

旧街凉风 提交于 2020-07-24 13:19:19
前言 一直以来对内部服务间使用RPC的方式调用都比较赞同,因为内部间没有这么多限制,最简单明了的方式就是最合适的方式。个人比较喜欢类似Dubbo的那种使用方式,把接口层单独出来,作为服务的契约,服务端以这套契约提供服务,客户端使用这套契约调用服务,和使用本地方法的方式是一样的。.Net平台上类似Dubbo这种相对比较完善的RPC框架还是比较少的,GRPC确实是一款非常优秀的RPC框架,能夸语言调用,但是从个人的角度上来说每次还得编写proto文件感觉还是比较麻烦的。如今服务拆分,微服务架构比较盛行的潮流下,一个简单实用的RPC框架确实可以提升很多开发效率。 简介 随着.Net Core逐渐成熟稳定,为我一直以来想实现的这个目标提供了便利的方式。于是利用闲暇时间本人手写了一套基于Asp.Net Core的RPC框架,算是实现了一个自己的小目标。大致的实现方式,Server端依赖Asp.Net Core,采用的是中间件的方式拦截处理请求比较方便。Client端可以是任何可承载.Net Core的宿主程序。通信方式是HTTP协议,使用的是HttpClientFactory。至于为什么使用HttpClientFactory,因为HttpClientFactory可以更轻松的实现服务发现,而且可以很好的集成Polly,很方便的实现,超时重试,熔断降级这些,给开发过程中提供了很多便利

为什么要进行系统拆分?

╄→尐↘猪︶ㄣ 提交于 2020-07-24 11:18:49
面试题 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗? 面试官心理分析 从这个问题开始就进行分布式系统环节了,现在出去面试分布式都成标配了,没有哪个公司不问问你分布式的事儿。你要是不会分布式的东西,简直这简历没法看,没人会让你去面试。 其实为啥会这样呢?这就是因为整个大行业技术发展的原因。 早些年,印象中在 2010 年初的时候,整个 IT 行业,很少有人谈分布式,更不用说微服务,虽然很多 BAT 等大型公司,因为系统的复杂性,很早就是分布式架构,大量的服务,只不过微服务大多基于自己搞的一套框架来实现而已。 但是确实,那个年代,大家很重视 ssh2,很多中小型公司几乎大部分都是玩儿 struts2、spring、hibernate,稍晚一些,才进入了 spring mvc、spring、mybatis 的组合。那个时候整个行业的技术水平就是那样,当年 oracle 很火,oracle 管理员很吃香,oracle 性能优化啥的都是 IT 男的大杀招啊。连大数据都没人提,当年 OCP、OCM 等认证培训机构,火的不行。 但是确实随着时代的发展,慢慢的,很多公司开始接受分布式系统架构了,这里面尤为对行业有至关重要影响的,是阿里的 dubbo, 某种程度上而言,阿里在这里推动了行业技术的前进 。 正是因为有阿里的 dubbo,很多中小型公司才可以基于 dubbo

初探Pinpoint Agent 启动源码

杀马特。学长 韩版系。学妹 提交于 2020-07-23 17:28:15
本文源码基于Pinpoint 2.0.3-SNAPSHOT版本 官方开源地址: https://github.com/naver/pinpoint Pinpoint Agent Pinpoint通过字节码增强技术来实现无侵入式的调用链采集。其核心实现是基于JVM的Java Agent机制。 我们使用Pinpoint时,需要在Java应用启动参数上加上 -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar 参数,这样,当我们的Java应用启动时,会同时启动Agent。 Pinpoint Agent在启动的时候,会加载 plugin 文件夹下所有的插件,这些插件会对特定class类修改字节码,在一些指定的方法调用前后加上链路采集逻辑(比如Dubbo中 AbstractProxyInvoker 的 invoke() 方法),这样就实现了调用链监控功能。 Pinpoint官方文档中的原理描述: 在pintpoin-bootstrap模块中,我们可以在pom文件中看到maven插件里有MANIFEST相关的配置,指定了 Premain-Class ,这个配置在打包时也会生成到MANIFEST.MF文件中: 执行premain()方法 通过上述配置可知,当我们启动接入了pinpoint的Java应用时,会先执行

想开发IM集群?先搞懂什么是RPC!

ぃ、小莉子 提交于 2020-05-09 20:52:11
本文引用了后端技术指南针公众号“浅谈RPC那些事儿1”和即时通讯网的“即时通讯新手入门:快速理解RPC技术——基本概念、原理和用途”两篇文章的部分内容。 1、引言 经常有开发者在纠结怎么开发IM集群,虽然真正的使用人数,可能用个人电脑单机都能支撑。 你也许会说,明明不需要用到IM集群,干吗要自找麻烦?答曰:“老板说这个得有!”、“万一产品做成了,用户量达到百万、千万级呢?”,各种回答,反此种种。总之,IM集群就是得整一个(先甭管用不用的上...)。 当然,玩笑归玩笑,真正要做到可投入到生产级别的IM集群系统,难度还是相当大的。必竟IM这种长连接应用相比传统Http这种短连接应用太不标准。 我们以一个典型的IM聊天消息传输为例: 假设存在两个正在聊天的用户(用户A和用户B),当A连接的是IM集群中的IM实例1、B连接的是IM集群中的IM实例2,此时当用户A向用户B发送一条聊天消息时,这条消息应该如何传递呢? 我们梳理一下上面这个例子的消息流转过程: 1)IM聊天消息首先会由用户A发往IM实例1; 2)IM实例1会将此条消息转交给IM实例2; 3)IM实例2会将此条消息最终投递给连接在本实例上的用户B。 如上述流程所示,这就是一个IM集群系统中典型的聊天消息投递过程。 那么,这其中涉及到一个关键步骤:即第2)步中如何实现“IM实例1会将此条消息转交给IM实例2”? 此时

微服务--SpringCloud

守給你的承諾、 提交于 2020-05-09 20:38:25
第一章 微服务与 Spring Cloud 1.1 架构的衍进 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 互联网产品常常面临庞大的用户量,日均数十亿 PV 的高并发, PB 级别的数据存储等问题的挑战,同时要求保证系统的高可用和弹性伸缩,并且能够根据需要进行快速迭代扩展,这些都对于系统架构提出了很高的要求。 互联网架构从简到繁的演进至今,大体上可分为这么几个阶段:单一应用架构 -> 垂直应用架构 -> 微服务架构。 1.1.1 单一应用架构 当网站流量很小时,只需要一个应用,将所有的功能都部署在一起,用来减少部署节点和成本。这时,用于简化增删改查工作量的数据访问框架(ORM)是关键。我们更加关注的是简化开发工作。如图1-1: 特点: 所有的功能集中在一个工程中。 应用与数据库分开部署。 通过部署应用集群和数据库集群来提高系统的性能。 优点: 项目架构简单,前期开发成本低,周期短,小型项目的首选。 缺点: 全部功能集中在一个工程中,代码耦合,对于大型项目不易扩展及维护。 提高系统性能只能通过扩展集群,成本高。 单点容错率低。 1.1.2 垂直应用架构 · 当访问量逐渐增大,功能逐渐复杂起来,单一应用架构就显得有些捉襟见肘,由于所有的功能都写在同一个工程中

如果就以平时项目经验来面试,通过估计很难,再论面试前的准备

空扰寡人 提交于 2020-05-09 16:22:56
1、框架是重点,但别让人感觉你只会山寨别人的代码   在面试前,我会阅读简历以查看候选人在框架方面的项目经验,在候选人的项目介绍的环节,我也会着重关注候选人最近的框架经验,目前比较热门的是SSM。  不过,一般工作在5年内的候选人,大多仅仅是能“山寨”别人的代码,也就是说能在现有框架的基础上,照着别人写的流程,扩展出新的功能模块。比如要写个股票挂单的功能模块,是会模仿现有的下单流程,然后从前端到后端再到数据库,依样画葫芦写一遍,最多把功能相关的代码点改掉。   其实我们每个人都这样过来的,但在面试时,如果你仅仅表现出这样的能力,就和大多数人的水平差不多了,在这点就没法体现出你的优势了。   我们知道,如果 单纯使用SSM框架,大多数项目都会有痛点。比如 数据库性能差,或者业务模块比较复杂,并发量比较高,用Spring MVC里的Controller无法满足跳转的需求。所以我一般还会主动问:你除了依照现有框架写业务代码时,还做了哪些改动?    我听到的回答有:增加了Redis缓存,以避免频繁调用一些不变的数据。或者,在MyBitas的xml里,select语句where条件有isnull,即这个值有就增加一个where条件,对此,对任何一个where增加一个不带isnull的查询条件,以免该语句当传入参数都是null时,做全表扫描。或者,干脆说,后端异步返回的数据量很大,时间很长

SpringBoot学习之路---SpringBoot、Dubbo、Zookeeper整合

て烟熏妆下的殇ゞ 提交于 2020-05-09 12:47:37
承接上文,介绍了 Dubbo 与 Zookeeper 之后,这一篇博客就来记录一下怎么在 SpringBoot 项目中整合它们。 首先因为 Dubbo 的架构设计,有 服务提供者(provider) 和 服务消费者(consumer) ,那我们可以创建一个空项目,并往里面加入两个子模块,一个叫 provider_ticket ,另外一个是 consumer_user 。由前者提供服务,并注册到 Zookeeper 中,后者订阅 Zookeeper ,收到通知后远程调用前者完成业务。大致业务逻辑就是这样。 现在开始行动吧,项目创建好之后: Dubbo 内部还是有挺多组件的,如果在以往的SSM项目中,我们会在配置文件中,配置很多 <bean> 组件,但好在 SpringBoot 的优势,它会为我们自动导入各种组件,我们只需要在两个模块中都引入 Dubbo 的 starter 即可: < dependency > < groupId > com.alibaba.spring.boot </ groupId > < artifactId > dubbo-spring-boot-starter </ artifactId > < version > 2.0.0 </ version > </ dependency > 当然这还不够,因为还需要注册中心 Zookeeper ,这里引入它的客户端