Page 151 - 《软件学报》2020年第11期
P. 151

丁丹  等:场景驱动且自底向上的单体系统微服务拆分方法                                                     3467


                    (3)  识别共享群组
                    共享度为单个数据表的特性,不能直接反映在边的权重上.本文首先识别出共享度较高的数据表,再根据这
                 些表之间的依赖程度进行分类,最终得到若干个共享群组.每一个共享群组包含若干张共享表,且这些表之间存
                 在较强的依赖关系,倾向于共同提取出来作为一个微服务.
                    对于第 i 张表 T i ,定义其场景、调用链和 SQL 这 3 个级别的共享度如下.
                    a)   场景级别的共享度 S Scenario (T i ),等于操作表 T i 的场景数量占总场景数量的比例.
                                                           | Scenario ( ) |T
                                                 S Scenario () =   i                                  (6)
                                                       T
                                                        i
                                                             N Scenario
                    b)   调用链级别的共享度 S Trace (T i ),等于操作表 T i 的调用链数量占总调用链数量的比例.
                                                           |Trace ( ) |T
                                                   S   () =      i                                    (7)
                                                       T
                                                    Trace  i  N
                                                              Trace
                    c)   SQL 级别的共享度 S SQL (T i ),等于操作表 T i 的 SQL 语句数量占总 SQL 语句数量的比例.
                                                    S SQL ()T =  | SQL ( ) |T i                       (8)
                                                        i
                                                             N SQL
                    3 个级别的共享度按下式进行加权累加,得到表 T i 的总共享度 S Total (T i ).
                                         S Total (T i )=β 1 ⋅S SQL (T i )+β 2 ⋅S Trace (T i )+β 3 ⋅S Scenario (T i )  (9)
                 其中,β 1 =0.2,β 2 =0.8,β 3 =1.
                    计算每张表的共享度并从高到低排序,根据一定策略截取前 x 张表作为共享表.实际上,x 的值和表总数 n
                 有一定关系,n 越大,x 也应该越大.假设共享表数量占总表数量的比例为 y,通过定义一些特殊点(见表 1)获取 x
                 和 y 的拟合关系曲线,如图 5 所示.

                                 Table 1    Special points of total table number and shared table proportion
                                               表 1   表总数与共享表占比特殊点
                             表的总数 n        10        20       30       50       100     150 以上
                            共享表占比 y        0.3      0.25      0.2      0.15     0.1      0.08













                                      Fig.5    Fitting curve of total table number-shared table ratio
                                              图 5   表总数-共享表占比拟合曲线
                    最终共享表的数量即为表总数与共享表占比之积,再取整.
                                                        x=⎣n⋅y⎦                                      (10)
                    截取一定数量共享度高的数据表后,还需要对这些表之间的依赖关系进行分析.共享表 T a 对共享表 T b 的依
                 赖度同样分为 SQL、调用链和场景这 3 个级别.
                    a)   T a 对 T b 的 SQL 依赖度定义为 D SQL (T a →T b ),等于同时操作 T a ,T b 这两张表的 SQL 语句数量占操作 T a
                        的 SQL 语句数量的比例.
                                                         | SQL ( )T ∩ SQL ( ) |T
                                             D SQL (T →  a  T b ) =  a  b                            (11)
                                                             | SQL ( ) |T a
   146   147   148   149   150   151   152   153   154   155   156