×

dubbo dub du

dubbo原理和机制是什么?module、pattern、paradigm的区别

admin admin 发表于2022-05-19 12:10:25 浏览131 评论0

抢沙发发表评论

dubbo原理和机制是什么


dubbo原理和机制:应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。

注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。

监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示。

服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销。

服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销。

扩展资料:

Dubbo是使用AtomicLong从0开始累计数字的,将打包的方法调用信息(如调用的接口名称,方法名称,参数值列表等),和处理结果的回调对象callback,全部封装在一起,组成一个对象object向专门存放调用信息的全局ConcurrentHashMap里面put(ID, object)将ID和打包的方法调用信息封装成一对象connRequest,使用IoSession.write(connRequest)异步发送出去。-dubbo

当前线程再使用callback的get()方法试图获取远程返回的结果,在get()内部,则使用synchronized获取回调对象callback的锁, 再先检测是否已经获取到结果,如果没有,然后调用callback的wait()方法,释放callback上的锁,让当前线程处于等待状态。-du

参考资料来源:百度百科-Dubbo


module、pattern、paradigm的区别


这3个词意思都不一样吧。。。
module 英[ˈmɒdju:l] 美[ˈmɑ:dʒul]
n. 模块; 组件; (宇宙飞船上各个独立的) 舱; 测量流水等的单位;
[例句]These courses cover a twelve-week period and are organised into three four-week modules.
这些课程要上12周,分为3个单元,每单元4周。
pattern 英[ˈpætn] 美[ˈpætərn]
n. 模式; 图案; 花样,样品; 榜样,典范;
vt. 模仿; 以图案装饰;
vi. 形成图案;
[例句]All three attacks followed the same pattern
3次袭击模式相同。
paradigm
英[ˈpærədaɪm] 美[ˈpærəˌdaɪm, -ˌdɪm]
n. 范例,样式,模范; 词形变化表;
[例句]He had become the paradigm of the successful man.
他已经成为成功人士的典范。
-dubbo

linux内核工作队列怎么工作的


Linux 2.6内核使用了不少工作队列来处理任务,他在使用上和 tasklet最大的不同是工作队列的函数可以使用休眠,而tasklet的函数是不允许使用休眠的。
工作队列的使用又分两种情况,一种是利用系统共享的工作队列来添加自己的工作,这种情况处理函数不能消耗太多时间,这样会影响共享队列中其他任务的处理;另外一种是创建自己的工作队列并添加工作。

(一)利用系统共享的工作队列添加工作:

第一步:声明或编写一个工作处理函数
  void my_func();
第二步:创建一个工作结构体变量,并将处理函数和参数的入口地址赋给这个工作结构体变量
  DECLARE_WORK(my_work,my_func,&data); //编译时创建名为my_work的结构体变量并把函数入口地址和参数地址赋给它;
  如果不想要在编译时就用DECLARE_WORK()创建并初始化工作结构体变量,也可以在程序运行时再用INIT_WORK()创建
  struct work_struct my_work; //创建一个名为my_work的结构体变量,创建后才能使用INIT_WORK()
  INIT_WORK(&my_work,my_func,&data); //初始化已经创建的my_work,其实就是往这个结构体变量中添加处理函数的入口地址和data的地址,通常在驱动的open函数中完成
  第三步:将工作结构体变量添加入系统的共享工作队列
  schedule_work(&my_work); //添加入队列的工作完成后会自动从队列中删除
  或schedule_delayed_work(&my_work,tick); //延时tick个滴答后再提交工作
  (二)创建自己的工作队列来添加工作
  第一步:声明工作处理函数和一个指向工作队列的指针
  void my_func();
  struct workqueue_struct *p_queue;
  第二步:创建自己的工作队列和工作结构体变量(通常在open函数中完成)
  p_queu=create_workqueue(“my_queue“); //创建一个名为my_queue的工作队列并把工作队列的入口地址赋给声明的指针
  struct work_struct my_work;
  INIT_WORK(&my_work, my_func, &data); //创建一个工作结构体变量并初始化,和第一种情况的方法一样
  第三步:将工作添加入自己创建的工作队列等待执行
  queue_work(p_queue, &my_work);
  //作用与schedule_work()类似,不同的是将工作添加入p_queue指针指向的工作队列而不是系统共享的工作队列
  第四步:删除自己的工作队列
  destroy_workqueue(p_queue); //一般是在close函数中删除
-du