java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2389|回复: 0

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

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

    [LV.Master]出神入化

    2025

    主题

    3683

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66101

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

    发表于 2017-3-15 18:18:57 | 显示全部楼层 |阅读模式
    11.2 使用与运维0 }; H' u2 Y! J' {# U
    OceanBase不是设计出来的,而是在使用过程中不断进化出来的。因此,系统使
    5 w: X1 n! T0 X+ q6 W用以及运维的方便性至关重要。' f6 Y: k* ^3 \( c
    OceanBase的使用者是业务系统开发人员,并交由专门的OceanBase DBA来运
    4 r% }: y9 u5 t  h- x9 K- ?9 g4 A维。为了方便业务使用,OceanBase实现了SQL接口且兼容MySQL协议,从而融入到# G5 A( C' e$ P: Z, A
    MySQL开源生态圈。MySQL大部分管理工具,例如MySQL客户端,MySQL admin,* f0 l2 U5 a. i  o6 Q; I
    能够在OceanBase系统中直接使用。另外,OceanBase将系统运维、监控相关的内部1 |# W5 g( n, F7 _+ q% B2 \
    信息存放到内部的系统表中,从而方便运维、监控系统获取。$ S" X! Y5 j8 h
    11.2.1 使用
    ; m6 b0 D; R2 L) |, e- J9 x. i; g7 POceanBase早期版本只允许通过Java或者C API接口访问,新版本增加了SQL支: n" }# O4 T% a) c' U
    持,且兼容MySQL客户端访问协议。OceanBase推荐用户使用SQL,但老应用仍然可$ z  F4 s/ N. }7 R* B
    以使用以前的Java API访问OceanBase。下面介绍几个访问与使用场景。
    * L0 i7 s6 g8 j( q* Y0 w1.MySQL客户端连接; n3 X5 F1 D! S$ E: @. S
    如图11-4所示,使用者采用MySQL客户端连接OceanBase。通过MySQL客户端可
    ' N! k; g7 _/ W  z& t. d以查看系统已有的表格、表格schema,执行select、update、insert、delete等SQL语
    1 V+ q) ?  Q  o3 _, i( ?& L0 \3 Y句,查看系统内部状态,以及发送OceanBase集群运维命令。图中首先通过create
    # I8 e, B5 a7 Z. O5 g/ ptable命令创建一张名称为test的表格,表格包含两列:id和name,其中id为主键。接: ]& J, R& A/ R0 [& N
    着,往表格中写入两行记录(1,"alice"),(2,"bob")。最后,通过select语句读
    7 X# b* U7 }) G4 R. V+ |8 B取这两行数据。
    * n! c( V5 d5 M6 i0 b图 11-4 采用MySQL客户端连接OceanBase5 H) d5 q# k: Y- W, A4 c
    2.JDBC访问(JDBC template)
    " K1 h% e* g+ \/ k1 v+ S( i$ D  ZJava应用通过标准JDBC访问OceanBase,代码如下所示:
    ( O8 |& T( y+ a# q9 dObGroupDataSource groupSource=new OBGroupDataSource();
    6 @& ~# ?' g1 Q) o- Z; v0 l4 [groupSource.setUserName("user");//设置用户名' e! S5 i4 \1 N9 A
    groupSource.setPasswd("pass");//设置密码) Y1 c; q" {) Y  }, K$ s3 j4 ]
    groupSource.setDbName("test");//OceanBase不支持db,这里可以填任意值! s0 Y; N+ P# d7 G
    groupSouorce.setConfigURL(ob_addr_url);//设置OceanBase集群的地址
    0 K. L& v  d9 M1 O: E! agroupSource.init();//初始化data source/ q% P  F, J" e5 e1 w6 ?
    JdbcTemplate jtp=new JdbcTemplate();, ?; @0 Z! j! R  V- h7 L8 U
    jtp.setDataSource(groupSource);//设置jdbc template依赖的data source
    * t# Q5 [" v3 O& C- \String sql="select 1 from dual";+ O/ X0 c' ~# [) I4 W4 q
    int ret=jtp.queryForInt(sql);//执行SQL查询
    " u8 x  L6 x. u% w3.Spring集成
    : V, H0 _1 v6 _$ a7 |* M可以通过将OceanBase DataSource集成到Spring中,配置如下:5 ]2 t, N0 p2 o( l- V/ M
    <bean id="groupDataSource"
    * J. Q! W& ], K# O3 U6 e  T/ Q( E/ Hclass="com.alipay.oceanbase.ObGroupDataSource"
    / p; s7 v" n7 u$ R8 Sinit-method="init">4 j2 D4 c6 {, @6 @6 X2 k
    <property name="username"value="user"/>: \. J4 l0 E* f* y/ t
    <property name="passwd"value="pass"/>
    ; B/ c2 z' |& D: M<property name="dbName"value="test"/>. r3 o% |8 [- S- ?
    <property name="configURL"value=ob_addr_url/>
    + ^2 r8 _5 \9 {, C1 F4 E</bean>6 r1 c: F9 M, B% J3 l$ q6 A
    4.C客户端& P7 R$ f7 o+ h  G. I5 \
    C应用通过OceanBase C客户端访问OceanBase,使用方式与MySQL C客户端完全
    : I3 D7 i( Y/ S% F  B! z一致,代码如下:4 \3 ^9 B8 \! u* v# z; I
    MYSQL mysql;
    2 {2 O* n6 _, P" }: f  emysql_init(&mysql); //初始化
    3 U, M6 D" m' c1 H  t3 Zmysql_real_connect(&mysql,ob_url,ob_user,ob_pass,NULL,0,NULL,0); //连接
    : x/ H$ G0 L. o& SOceanBase数据库
    0 z: f# q3 w/ W* ]" smysql_real_query(&mysql,sql,strlen(sql)); //执行SQL查询/ v, o% I8 b' r7 l& |0 J- Y, {- f
    MYSQL_RES*res=mysql_store_result(&mysql); //获取SQL查询结果集; p/ p3 o8 U2 }/ U; X
    //处理SQL查询返回的结果集
    . ]5 L0 d: K7 d$ @- D0 k/ w  V6 u; Hwhile(MYSQL_ROW row=mysql_fetch_row(res)) //从结果集读取一行数据0 J0 b! ]& B* h% o. z$ D6 j* R
    {. r/ f0 F! T9 t2 J* M. y
    //处理结果集中的一行结果  B4 b$ ~8 H& [2 ^2 f
    }
    : J$ ^2 b" Y! ~7 r/ Q% xmysql_free_result(res); //释放结果集- G9 f$ Y# C# ^' {- D. P) ~# _* Z% S
    mysql_close(&mysql); //关闭连接; h4 `# v$ g+ q; j
    当然,应用可能会在客户端维护OceanBase连接池,Java应用还可能会使用其他
    + A3 [- e! A! R6 x& A持久层框架,例如iBatis。由于OceanBase兼容JDBC和MySQL C客户端,使用MySQL
    * B  u4 \# e& `+ i+ b的应用无须修改代码就能接入OceanBase。' Y1 R2 |5 C& H7 n
    11.2.2 运维
    7 [4 q: T2 G# NOceanBase内部实现了系统表机制,用于存储监控以及运维相关的信息。内部系* n8 @- {% N6 J  j& _9 D
    统表包含的内容如下:
    " q* W0 B+ w- a2 E, c●数据字典:表格的定义以及表格之间的关系、用户以及权限信息;0 H$ b8 y/ K2 h
    ●服务器列表:集群中每种角色所在的服务器列表;
    2 U3 V/ y" ], ^9 U) t9 t) E& n●配置信息:集群中每台服务器的配置信息;
    # d: f# A5 k4 K) p1 T4 d, p●内部状态:每台服务器的读写次数、读写延时、缓存命中率、子表个数、内( }# O4 ?, C: o4 e
    存、磁盘、CPU使用情况、请求关键路径时间消耗,每日合并状态等;
    1 ~7 M& f9 ]# F; w5 b基于内部系统表,可以开发各种方便的OceanBase运维功能,如OceanBase数据
    8 i8 J) C4 s! `3 l5 z$ O9 n* E库会话(Session)管理,读写性能实时监控工具、监控平台等。4 R4 e4 {9 ~; E5 z& s9 f
    图11-5是OceanBase某线上应用平均读取延时的监控图,包括单行读取平均延时
    ; D3 Y( ^' M- x  ^. P* |# S(average_succ_get_time)以及多行扫描平均延时(average_succ_scan_time)两个指7 D- f7 N  i4 X/ j% n) a3 O
    标,且单位均为微秒。监控图包含三种数据:当前数据(currval),昨天数据
    7 i3 X9 l+ N! z(lastval)以及上周数据(baseval),便于对比。由于监控、运维工具变化较快,这
    6 v5 k( ~3 @2 Y2 l5 n- Z里不做太多介绍。
    % N8 a! W# ~# d$ ]/ g/ p图 11-5 OceanBase某线上应用读取延时5 U  |8 P$ H/ S2 a

    7 M' k( O+ C1 W& m5 P# m7 _7 x* }  w

    # ~7 h) ~3 p9 e. s
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-29 09:42 , Processed in 0.147543 second(s), 35 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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