dubbo

1alt.

  1. 项目架构演进:单体架构,垂直架构(各个机器之间不进行交互.模块A、B放在一台机器上,模块C、D放在一台机器上),分布式架构(出现公共模块,隔离出来,通过rpc来进行调用)、soa架构(dubbo就是这种架构下的产物,通过ESB企业服务总线来进行中转调用),微服务架构(springCloud这是这种架构下的产物,彻底分割,独立部署,彻底组件化)。
  2. dubbo有两个重要功能:远程调用和服务治理。注册中心官方推荐使用zookeeper实现,也可以使用redis等实现,源阿里产品转移到apache顶级项目下,对国人友好。
  3. 快速入门案例总结:代码+配置+引入依赖
    代码:消费方使用@Reference注解来进行服务发现并生成代理对象复制到某一个类的成员变量中,服务提供方使用dubbo提供的@Service注解来进行标识将其注册到注册中心中。
    配置主要配置三项:项目的名称(盲猜应该是在zk中标识每个项目),注册中心的地址,dubbo包扫描(扫描需要远程注入类所在的包或者服务提供方接口所在的包)。
    引入依赖:主要有dubbo的依赖和zk的依赖。 4.dubbo admin可以替代dubbo monitor(官方不推荐,不是很完善)。dubbo admin是一个项目,技术架构为vue + springboot,所以只需要下载部署前后端项目,前端使用node.js,使用npm启动,后端部署只需下载jdk,修改项目中注册中心地址(在application.properties文件中修改),使用mvn命令打包,运行即可。就可以通过浏览器访问dubbo admin的前端项目获取到注册中心中注册的服务信息。
    5.dubbo高级特性:
  • 序列化。首先服务提供方和消费方都需要依赖暴露的接口项目(只有interface,不进行实现,由服务提供方进行实现)。当提供方和消费方之间传输对象时。比如要传输一个User对象,那么这个类必须实现serializable接口。
  • 地址缓存。一个面试题:注册中心挂了,服务能不能正常被访问。答案是以前的服务有可能被正常访问。因为消费方有地址缓存,当消费放第一次请求注册中心时,就会把服务提供方的地址缓存下来,接下来在进行远程调用的时候都会读取自己本地的缓存,不需要每次访问都经过注册中心,所以以前的服务一段时间内可以被访问。服务消费方和注册中心之间的通信是一种subscribe(订阅)/notify(通知)的通信方式,当服务提供方的IP地址发生变化之后,注册中心会通过notify机制向消费方进行提醒,更改缓存的地址,以便可以被正常访问到。
  • 超时机制:可以在@Service注解上或者@Reference注解上设置timeout属性,默认为1000ms,建议设置在服务提供方也就是@Service注解上,因为只有服务提供方才清楚服务提供方当前接口服务大约需要花费多长时间。在消费方的@Service注解上设置timeout属性会覆盖服务提供方设置的超时属性。当花费时间超过设置的超时属性值就会返回给服务消费方一个超时异常错误。
  • 重试机制:可以在@Service注解上设置retries属性,默认为两次。也就是总共会调用三次,才会返回超时错误。当网络链接中断,超过超时所设置的超时时间,就会进行重试,直到执行重试次数达到所设置的次数时,才会向服务消费方返回错误。
  • 多版本和灰度发布:先看张图:alt

服务提供者进行版本升级后,可以先让一部分服务消费者尝试新功能,其他服务还是尝试以前的服务,等到新功能没有出现毛病,才会让所有的消费者使用升级后的版本。具体实现步骤:可以在@Service注解上使用Version属性表明当前服务的版本号,然后在消费者者一段的@Reference中使用Version属性调用哪个版本的服务。

  • 负载均衡:服务提供方可以搭建集群,可以在服务消费方的@Reference注解上使用loadBalance属性(负载均衡策略)设置不同的策略。在@Reference注解上的cluster属性来设置。有四种:
    alt
    权重越大,被调用的几率越高。
  • 集群容错:服务调用出现错误之后,应该做何种处理:
  1. 是继续调用直到成功(failback),非常重要的操作
  2. 还是直接返回一个空的结果,忽略报错(failsafe),通常用于日志操作
  3. 还是调用一台提供者的服务立即返回错误信息(failfast),通常用于写操作
  4. 重试机制retries(failover),默认就是这种机制,重试两次
  5. 并行调用多个服务提供者提供的服务,只要有一个返回成功就行(forking)
  6. 广播调用所有的服务提供者集群,挨个调用,要是有一台报错,就返回消费调用错误信息。
    alt
  • 服务降级
    通过服务消费者的@Reference注解的mock属性来进行配置。 alt
    B机器的三个服务中支付服务是最重要的,其他两个服务不是特别重要,当B机器的服务器cpu等系统资源压力过大,就应该手动的关闭日志服务或者广告服务(force:return null),以腾出更多的系统资源来运行支付服务,或者调用这两个服务,但是失败了不会向消费者报错(fail:return null)。
全部评论

相关推荐

会飞的猿:我看你想进大厂,我给你总结一下学习路线吧,java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding,我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行,什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。项目的话其实说白了还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。另外,只想找个小厂的工作的话,没必要全都照这些准备,太累了,重点放在框架的使用和一些基础八股吧。大致路线就这样,没啥太多难度,就是量大,你能达到什么高度取决于你对自己多狠,祝好。
点赞 评论 收藏
分享
我看标题以为40W,我觉得最差也得40k,点进去一看40块。你永远想不到客户的预算有多低... 要求“前端使用vue+element开发一个pc端宠物网站和vue+vant开发一个移动端网站,类型是宠物网站的。客户预算40” 全网最受欢迎的嵌入式面经面经一共32篇文章,12w+字数,包含全部最新的面试必问考点,4.7w+同学学习,2800+订阅,非常适合在找工作面经薄弱的同学,3000+订阅还会涨价,提前订阅提前享受,持续更新中。原帖链接:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoMc
野猪不是猪🐗:哎呀,看来这位客户预算确实挺让人意外的呢!不过,别灰心,有时候客户的预算有限,但项目完成后说不定能带来意想不到的收获呢!😊 至于你提到的嵌入式面经,听起来好像很棒的样子!如果你对求职有帮助,那确实值得订阅学习哦!悄悄告诉你,点击我的头像,我们可以私信聊聊更多求职经验和技巧哦~🎉 对了,你对Vue和Element/Vant的开发有什么疑问或者想要分享的经验吗?我们可以一起探讨一下~😉
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务