java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2755|回复: 0

《大规模分布式存储系统》第11章 质量保证、运维及实践【11.2】

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2096

    主题

    3754

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66788

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2017-3-15 18:18:57 | 显示全部楼层 |阅读模式
    11.2 使用与运维
    ) W4 v- x1 K) v4 pOceanBase不是设计出来的,而是在使用过程中不断进化出来的。因此,系统使/ D# U8 L# O% P! E% H
    用以及运维的方便性至关重要。) c5 d& }4 Q2 x! u) N$ f  _
    OceanBase的使用者是业务系统开发人员,并交由专门的OceanBase DBA来运
    ; k7 M! h8 w' }% J& Z9 s) l" G! C维。为了方便业务使用,OceanBase实现了SQL接口且兼容MySQL协议,从而融入到: q  a, E& ]8 T& k1 O3 `* B6 N
    MySQL开源生态圈。MySQL大部分管理工具,例如MySQL客户端,MySQL admin,
    2 v2 f/ U' ~# b/ e  y能够在OceanBase系统中直接使用。另外,OceanBase将系统运维、监控相关的内部0 y- L, q/ S5 W/ `0 I
    信息存放到内部的系统表中,从而方便运维、监控系统获取。: j; H  e7 b& _, _
    11.2.1 使用- i2 u! g' C/ z  H+ t4 [
    OceanBase早期版本只允许通过Java或者C API接口访问,新版本增加了SQL支
    / K, y4 a+ {5 u. K持,且兼容MySQL客户端访问协议。OceanBase推荐用户使用SQL,但老应用仍然可
    3 Q9 f7 B7 D4 p% Y以使用以前的Java API访问OceanBase。下面介绍几个访问与使用场景。
    ; c0 Y) _- H' l1.MySQL客户端连接: i8 J0 @; C7 J! @) c0 v
    如图11-4所示,使用者采用MySQL客户端连接OceanBase。通过MySQL客户端可
    4 p1 k0 J' w: q& g9 x: ~以查看系统已有的表格、表格schema,执行select、update、insert、delete等SQL语
    + P& A3 K7 E# z8 ~& ?; j句,查看系统内部状态,以及发送OceanBase集群运维命令。图中首先通过create  i: H- w0 j1 S; k1 E) J( v! f
    table命令创建一张名称为test的表格,表格包含两列:id和name,其中id为主键。接
    ! K1 j$ U5 A! X  v+ M着,往表格中写入两行记录(1,"alice"),(2,"bob")。最后,通过select语句读
    5 j1 @5 t$ K# Q: F# `0 C/ X取这两行数据。
    $ ~' C7 ^( s% g. V/ Q5 z图 11-4 采用MySQL客户端连接OceanBase
    4 M9 x+ G; {) h5 a2.JDBC访问(JDBC template)
    ' d# `8 A5 h2 Q$ G+ V( hJava应用通过标准JDBC访问OceanBase,代码如下所示:
    ' O  D! G* \7 f5 g+ \4 l; B' ]# kObGroupDataSource groupSource=new OBGroupDataSource();
    . m0 X) ~, @( v7 |8 u6 W. y, EgroupSource.setUserName("user");//设置用户名
    + W9 \+ [* `: w' b/ O. L! u$ _groupSource.setPasswd("pass");//设置密码. r( J; O& \% W% ?4 I2 D/ C
    groupSource.setDbName("test");//OceanBase不支持db,这里可以填任意值
    7 p. U8 ?0 {6 M; T& P3 ]7 PgroupSouorce.setConfigURL(ob_addr_url);//设置OceanBase集群的地址
    - s1 G7 w) j9 X6 lgroupSource.init();//初始化data source
    4 k" m  Q( y& Q% P8 F# r; WJdbcTemplate jtp=new JdbcTemplate();- k  S) ~1 W; V5 O7 I
    jtp.setDataSource(groupSource);//设置jdbc template依赖的data source( t7 y+ w- v3 b8 r/ X: \/ w
    String sql="select 1 from dual";
    . e+ N5 @. E+ P2 f& Bint ret=jtp.queryForInt(sql);//执行SQL查询
    1 x7 Q: `' S2 L7 k" E7 Y3 _3.Spring集成% |4 l" Z+ C' u- q7 H8 g5 x5 B+ s9 A+ [
    可以通过将OceanBase DataSource集成到Spring中,配置如下:7 m" ~7 X0 G7 I+ I% U
    <bean id="groupDataSource"
    6 N$ E- b3 K1 Q  N; D2 Z5 {7 s- G3 Qclass="com.alipay.oceanbase.ObGroupDataSource", X; G' r* s1 P, w0 b; B7 d3 k
    init-method="init">
    * i( e8 W/ _! R8 I<property name="username"value="user"/>7 H, j! Y: n/ |% k% _! ^1 [; j
    <property name="passwd"value="pass"/>& o0 g- \3 z" u% V& H
    <property name="dbName"value="test"/>
    . f; T7 R1 U3 j; @<property name="configURL"value=ob_addr_url/>4 c. J4 [; @; T" ~; g8 J, K( |+ K
    </bean>
    $ @2 p9 a% Y3 E* O( f& v* @& W$ z$ l4.C客户端, q( ]9 i: d' ^! I
    C应用通过OceanBase C客户端访问OceanBase,使用方式与MySQL C客户端完全9 Z8 ^$ l( G6 t" I
    一致,代码如下:! `* Z8 p3 w9 X0 \
    MYSQL mysql;
    ) A( C, n) U' C0 t9 wmysql_init(&mysql); //初始化9 C& V7 k; l1 r# y/ p! V0 v
    mysql_real_connect(&mysql,ob_url,ob_user,ob_pass,NULL,0,NULL,0); //连接
    8 ^% ^' v1 u7 V. ^OceanBase数据库; J2 M1 S" I: L$ g
    mysql_real_query(&mysql,sql,strlen(sql)); //执行SQL查询  H5 J3 P8 Z( J% O7 Q7 @, W% s, Y6 e
    MYSQL_RES*res=mysql_store_result(&mysql); //获取SQL查询结果集9 c, `8 E: ~0 J
    //处理SQL查询返回的结果集" \5 X8 A- Q! H( U6 E& `. n, v
    while(MYSQL_ROW row=mysql_fetch_row(res)) //从结果集读取一行数据
    / x5 Q8 c8 F" _& ~% C; d{
    2 W6 E; w) L  ?//处理结果集中的一行结果1 X- w$ |. y* A0 `
    }
    8 n+ e1 W% c' [' C* Imysql_free_result(res); //释放结果集- o4 {6 h$ u5 E" Q, J: ]9 S6 O- R# `
    mysql_close(&mysql); //关闭连接# t" F1 L: C1 L
    当然,应用可能会在客户端维护OceanBase连接池,Java应用还可能会使用其他( a, K+ U4 R# E: m9 F0 n% n8 D
    持久层框架,例如iBatis。由于OceanBase兼容JDBC和MySQL C客户端,使用MySQL( T7 z+ O! j6 O5 F3 h' N
    的应用无须修改代码就能接入OceanBase。5 Z0 `" V4 N5 i8 q$ f% C" y
    11.2.2 运维+ I8 p5 t7 @1 S  ]: p+ o, p5 q8 u
    OceanBase内部实现了系统表机制,用于存储监控以及运维相关的信息。内部系
    ( R6 u# ^0 ?' X; A! h统表包含的内容如下:5 h9 B* j$ ^, p) ^/ Z- V. t' ?
    ●数据字典:表格的定义以及表格之间的关系、用户以及权限信息;
    ! j. ^1 ~0 E; `+ a; C# j●服务器列表:集群中每种角色所在的服务器列表;! n9 U& k& W% h6 v6 ]+ O
    ●配置信息:集群中每台服务器的配置信息;0 Q: T8 }  B- O2 c
    ●内部状态:每台服务器的读写次数、读写延时、缓存命中率、子表个数、内- Q% I) |6 W9 b; {
    存、磁盘、CPU使用情况、请求关键路径时间消耗,每日合并状态等;8 R) M' a; ]- X: W4 W# x% \
    基于内部系统表,可以开发各种方便的OceanBase运维功能,如OceanBase数据* N. i8 X% S4 i  F, ?2 J1 E7 F
    库会话(Session)管理,读写性能实时监控工具、监控平台等。2 O  a2 a7 o/ d5 Y" Z6 y& ], W8 W
    图11-5是OceanBase某线上应用平均读取延时的监控图,包括单行读取平均延时" v$ @/ t" s; C, a4 ?
    (average_succ_get_time)以及多行扫描平均延时(average_succ_scan_time)两个指
    ! J* F2 N9 m% L* J* u. f4 W( [标,且单位均为微秒。监控图包含三种数据:当前数据(currval),昨天数据
    - q0 W0 y+ N: b8 {, v1 e(lastval)以及上周数据(baseval),便于对比。由于监控、运维工具变化较快,这' m4 G. S' ^8 N' s% @( k8 B. I; t8 f
    里不做太多介绍。/ \! {& I' N/ i* m/ d' j: u1 D& f
    图 11-5 OceanBase某线上应用读取延时5 Q# ]$ X: W6 N7 Q$ u
    % Z# R- h* j2 ^4 d- e

    7 o/ e) R7 o0 ~# G! v2 Q# `( n7 M0 |8 R
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2025-4-1 14:02 , Processed in 0.127193 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表