OceanBase0.5中RPC的层次

在OceanBase0.5开源版本中,RPC其实是有一个层次的。自底向上,分别是:
Network Framework — libeasy,负责底层网络框架,packet级别
Client Manager — 负责跟libeasy交互,封装了回调逻辑、异步/同步逻辑
Rpc Stub — 封装了请求的序列化、反序列化逻辑,是应用代码与网络代码的粘合剂

应用代码直接使用Rpc Stub来使用网络最方便,跟调用本地函数区别不大。不需要关心序列化、反序列化过程中的内存问题。但是,应用层如果希望获得一些更为复杂的网络交互逻辑时Rpc Stub则不能提供。比如,希望在A函数post一个请求,然后希望在B函数里wait这个请求的返回值,rpc stub无能为力。

应用代码也可以直接用Client Manager,可以获得很大的灵活性。上一个例子中Rpc Stub搞不定的情况,Client Manager可以搞定。但是直接使用Client Manager会增加一些代码复杂度,例如:需要自己分配DataBuffer,如果追求高性能,还需要自己管理Thread Specific Buffer。

当业务逻辑的对网络需求的复杂度超过Client Manager能力范围时,可以直接用libeasy来解决问题。这是终极方案。在0.5中的SQL模块里用到了该方法,但使用经验证明这种方法可维护性很差,必须对其进行一定的封装。

需要传递哪些参数到远端的自问自答

思考是技术进步的阶梯

A向B机器发送一个plan执行的时候,随着plan本身还需要发送哪些结构?

分析:

OB0.5开源版中发送了SimpleScanParam,但这个参数并不是单独发送的,而是包装在了一个ObHuskTabletScan运算符中,在CS端根据运算符中的参数重新构造子Plan。

答案:

只需要发送plan本身即可。其余要发送的内容都应该封装到operator内部。

进一步发问:

operator内部要封装什么呢?

答案:

比如,读数据超时时间。在运行时用户可以通过命令修改读超时时间,需要将新的时间让plan知晓,以便序列化到B端。
再比如,读数据的版本号。随着时间流逝plan被反复执行,plan需要携带的版本号应该要随时间变化。
这些内容的变化,都应该封装到operator内部。具体做法可以是设置一个IParamProvider()给operator,operator可以随时通过IParamProvider获得最新的数据。IParamProvider的实现比较简单,它持有整个SQL Plan运行时环境的引用,可以随时从中获得最新的参数提供给operator。

这个细节不需要scheduler关心。

结论:

  1. 需要发送plan到B端,而不是自己裸发operator tree到远端。因为plan里面提供了一套遍历op tree(序列化)、分配operator(反序列化)的机制。相当于是一个query的管理器。
  2. 发送到B端的plan并不是一个全功能的plan,有精简的空间。
  3. plan之外并不需要传额外的东西到B端。

《微文章营销版》自制模板的方法

一、目录结构

所有模板都在./source/modules/quickshare3/template/mobile/themes/目录下,以下简称“themes目录”

下面一步步介绍如何编写自己的模板:
1. 在themes目录下建立自己的模板文件夹,例如bluesky
2. 在bluesky下建立list_a.html,list_b.html,detail_a.html三个文件,分别是列表和详情页。 这里list_a, list_b,detail_a这些名字都是随便取的,可以随便改。
3. 在bluesky下建立manifest.xml文件,文件格式参考themes/plain/manifest.xml
4. 然后还有list_a和detai_a的预览图片preview1.png, detail1.jpg。可以放你的设计图上去,比较美观。

至此,目录结构建立好了。总结如下:

./source/modules/quickshare3/template/mobile/themes/bluesky/list_a.html
                                                           /list_b.html
                                                           /detail_a.html
                                                           /manifest.xml
                                                           /preview1.png
                                                           /detail1.jpg


二、内容

1. manifest.xml的内容

<manifest versionCode="0.5,0.51,0.52">
  <identifie><![CDATA[bluesky]]></identifie>
  <title><![CDATA[蓝色天空]]></title>
  <description><![CDATA[我的第一个主题蓝色天空]]></description>
  <author><![CDATA[晓楚]]></author>
  <url><![CDATA[http://blog.xiaoheqingting.com]]></url>
  <category>
    <item>
      <title><![CDATA[列表1]]></title>
      <thumb><![CDATA[preview1.png]]></thumb>
      <file><![CDATA[list_a]]></file>
    </item>
    <item>
      <title><![CDATA[列表2]]></title>
      <thumb><![CDATA[http://pic1.win4000.com/pic/1/2e/25f3481737.jpg]]></thumb>
      <file><![CDATA[list_b]]></file>
    </item>
  </category>
  <article>
    <item>
      <title><![CDATA[详情1]]></title>
      <thumb><![CDATA[detail1.jpg]]></thumb>
      <file><![CDATA[detail_a]]></file>
    </item>
  </article>
</manifest>

其中需要注意的点有:
1. identifie必须是模板的目录名称,不能改
2. thumb可以是本地图片,可以是网络图片。

2. 模板内容
请参考themes/shouxiaoshen/list_img1.html(比较简单,不支持二级目录),themes/plain/list_plain.html(支持二级目录)。

注意事项:
1. 获取文章列表的API有更改,不是site_article_search,site_category,site_article,需要改成quickshare3_site_article_search,quickshare3_site_category,quickshare3_site_article等。

同时,你还可以在这里购买商业模板

Hello!Nepal!

从尼泊尔归来已经快一个月了。我和raywill都没有撰文记录一下,实为可惜,在尼泊尔发生了几件有意思的事儿,记录在此:

1、在加德满都经历了第一次停电,后来才知道尼泊尔并没有自己的电力系统。这个国家的电能由印度供给,基本属于印度一拉闸,这里就完蛋的状态。尼泊尔每个区都会在每个时段定点停电。尼泊尔的每个旅馆都会在贴上旅客须知告知大家:抓紧时间充电哦~

2、尼泊尔所有的路都没有红绿灯和指示牌,那么是否会出现交通堵塞呢?当然了!想什么呢你,当然会堵塞,可是有意思的是,不管路上怎么赌,我都不曾见过一个尼泊尔人生气,骂街,吵架的。大家永远乐呵呵的在灰尘漫天,拥挤不堪的路上奔驰。

3、在加德满都逛猴庙的时候我遭遇了惊醒一幕,被一个猴子狠狠的抓了一把背,导致直到现在背部还留着一道特别醒目的大抓痕。因为这件事,我和老余还体验了一把尼泊尔的医院。被抓的当下老余猴子身上带有病毒,坚持让我去医院给医生看看,我们在好心肠的旅馆前台小哥的带领下,杀到了一个看上去像烂尾楼的建筑门口。我和老余面面相觑:这能是医院?Bingo!这里就是如假包换的医院了,我心里一阵嘀咕,这个烂尾楼一样的地方能给看好么,事实证明,花了不到5块钱人民币买了一针疫苗,在众目睽睽之下,医生充满鄙视的给我打了一阵,她心里一定在想:不就给猴挠了一下么,有什么好来医院的!小题大做!后来我们才知道,尼泊尔的医疗条件很差,医疗系统还处在十分不健全的时代,这个被我瞧不起的烂尾楼已经是加德满都很不错的公立医院了。医院里没有一个人会说英语哦~感谢当地热情的大爷大妈帮我和老余翻译。

4、在博卡拉登山经历了毕生最狼狈的时刻,在大暴雨中浑身湿透手脚并用的爬山,我都很奇怪我们居然都没有滑下悬崖摔死。一众人都冷得浑身哆嗦,老余买了一瓶威士忌,每个人都猛灌了几大口,活过来了。

5、头一次尝试在海拔3000米洗冷水澡,绝对的清新亮,透心凉。最后都不知道在干嘛了,听着自己上下牙齿的磕巴声,面色发白的冲出洗澡间,居然也就没有感冒,不知道是不是那针猴疫苗的功能呢?

6、在博卡拉的lakeside遭遇了一大群中国人,导致我一直有错觉我是不是在颐和园泛舟。