開發與維運

國產化環境下開發流程

前言

隨著我國計算機技術的發展,國產服務器、數據庫產品也逐漸趨於成熟,作為政府行業,採用國內自主研發的服務器和數據庫意義重大。北京市委已經率先採用國產化系統,相信不久的未來,政府行業將逐漸普及國產化系統和數據庫。

然而,對於熟悉了Linux、MySQL或者Oracle的開發者或者運維來說,可能並不能很快的上手國產環境。而且關於國產系統和數據庫的生態圈還不完善,有一些問題網上也查不到。本片文章就國內比較成熟的操作系統和數據庫展開說明,以快速瞭解和上手國產化開發,並減少大家後續在國產化開發中的困難。下面會介紹中科方德操作系統人大金倉數據庫

正文

中科方德操作系統

1.png

界面大概如上圖,國產化環境開發的難點,一方面就是在於這個操作系統

整體命令行操作類似CentOS。為了安全起見,該系統做了很多方面的限制:

  • 由於禁止接入外網,所以安裝部署只能通過RPM包或者Docker鏡像的方式進行安裝
  • 該系統需要通過光盤刻錄的方式,進行上傳RPM或者Docker鏡像,為了信息安全,也就是隻能往機器上拷貝文件而不能把文件拷貝下來
  • 不能通過命令後直接安裝RPM軟件,必須要通過類似軟件管理圖形化界面的方式進行安裝,安裝前必須填寫軟件的簽名信息(比如聯繫人電話等信息、軟件安裝包本身的信息)
  • 不能直接在機器上執行直接拷貝進來的外來可執行文件。例如通過光盤拷貝的shell腳本、以及免安裝的軟件、以及通過編譯安裝的軟件等都沒有權限執行
  • 安裝軟件(例如數據庫)等過程會缺少一些依賴庫(C語言、C++的)。這些庫文件一般也需要自行下載RPM包進行光盤刻錄
  • Docker必須使用廠商提供的安裝軟件,製作鏡像推薦使用CentOS8,否者啟動容器會沒有權限

中科方德最佳實踐

對於環境的部署,直接通過RPM或者Docker鏡像的方式

對於 MySQL、Redis、Nginx、Zookeeper、ElasticSearch 等軟件、官網有提供對應的RPM包,推薦直接通過軟件管理器RPM的方式進行安裝

找不到RPM包,推薦使用Docker部署

Docker部署注意事項

需要找一臺CentOS8系統的服務器,用來製作鏡像

製作好的鏡像,通過 docker save命令保存,並通過光盤刻錄到中科方德機器,再通過load命令安裝鏡像

2.png

以上就是中科方德操作系統需要注意的點,剩下的就是要求使用者熟練掌握Linux


人大金倉數據庫

人大金倉(KingbaseES)是北京人大金倉信息技術股份有限公司自主研製開發的關係型數據庫。下面重點介紹一下人大金倉的常用的運維和開發技巧

1. 安裝人大金倉

1.1. 人大金倉安裝必須通過普通用戶安裝,這裡創建了一個kingbase用戶

useradd kingbase
passwd kingbase

1.2. 使用kingbase用戶上傳安裝包,並進行解壓

tar -zxvf KingbaseES_V008R003C002B0140_Lin64_install.tar.gz

1.3 執行setup.sh進行安裝

3.png

1.4 選擇安裝集

默認是完全安裝,即server和client全部安裝

1.5 選擇授權文件

安裝過程必須指定廠商提供的授權文件,當然也可以自行到官網下載一個月試用版

1.6 選擇安裝文件夾

這裡注意推薦使用默認文件夾,因為後面廠商提供的壓測工具默認指定的是默認文件夾

1.7 大小寫敏感

一般選擇大小寫不敏感,因為我們已有系統採用的數據大多是大小寫不敏感的,根據自己目前的數據庫進行選擇

安裝後的目錄如下

4.png

進入Server文件夾,執行root.sh腳本即可啟動數據庫

2. 人大金倉操作

2.1. 啟動與停止

systemctl start kingbase8d
systemctl stop kingbase8d

2.2. 登錄

進入Server/bin目錄下

5.png

執行如下命令登錄

  • 其中SYSTEM為用戶名
  • 密碼為123456
  • TEST為數據庫名

./ksql -USYSTEM -W123456 -p54321 TEST

TEST為默認數據庫,用於管理其他數據庫

例如想查看當前機器kingbase總連接數,可以用以上命令進入TEST,執行

select connections(); //查看連接數
select * from SYS_STAT_ACTIVITY; //查看連接客戶端

3. 開發方式

3.1 可以在安裝目錄下的Jdbc文件夾找到驅動jar包

6.png

3.2 然後在工程中集成jar包,測試連接

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestConnection {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Connection con;
        Class.forName("com.kingbase8.Driver");
        String url="jdbc:kingbase8://127.0.0.1:54321/MYDB";
        con=DriverManager.getConnection("jdbc:kingbase8://127.0.0.1:54321/TEST","SYSTEM","123456");
        System.out.println(con.getClientInfo());
        DatabaseMetaData metaData = con.getMetaData();
        String driverVersion = metaData.getDriverVersion();
        System.out.println(driverVersion);
    }
}

3.3 圖形化客戶端使用

windows推薦使用官方工具,可以直接到官網下載安裝,直接可以使用。操作跟Navicat差不多,官方工具支持很多功能如下:

  • SQL語句到導入導出
  • 數據遷移,將MySQL數據庫遷移到人大金倉(需要使用人大金倉數據轉換工具,同時連接MySQL,進行數據遷移操作)
  • 建表操作,推薦使用官方圖形化工具

mac推薦使用DataGrip,需要手動集成驅動

7.png

3.4 SQL適配

已有MySQL系統,遷移到人大金倉SQL語句需要一些改造

  • 主要是函數適配
  • 剔除不支持的特殊符號
  • group by字段要跟查找字段保持一致

4. 人大金倉性能壓測

4.1 定製化的sysbench使用

為了檢測數據庫性能,我們在中科方德機器上部署人大金倉和MySQL,並使用Sysbench進行數據庫對比基準測試。

該sysbench由廠商定製,使用方式如下

//配置sysbench路徑
export PATH=`pwd`:$PATH
//配置數據庫lib路徑
export LD_LIBRARY_PATH=/home/v8.3-build/kliao/v8.2_with_history/postgres/release/lib
//生成數據
sysbench oltp_common --kes-host=192.168.4.80 --kes-port=5433 --kes-connect_timeout=10 --kes-user=SYSTEM --kes-password=123 --kes-db=TEST --table-size=1000 prepare
//執行read_only
sysbench oltp_read_only  --kes-host=192.168.4.80 --kes-port=5433 --kes-connect_timeout=10 --kes-user=SYSTEM --kes-password=123 --kes-db=TEST --table-size=1000 --time=10  --threads=8 run
//執行oltp_write_only
sysbench oltp_write_only  --kes-host=192.168.4.80 --kes-port=5433 --kes-connect_timeout=10 --kes-user=SYSTEM --kes-password=123 --kes-db=TEST --table-size=1000 --time=10  --threads=8 run

4.2 壓測指標與結果分析

我們在16核心 64G的中科方德機器上進行壓測。使用sysbench分別生成5000w數據,分別對這兩個庫表進行只讀壓測。線程數設置為10、50、60、70、80、90、100、150、200、300、500、600、700、800等,每個併發壓測三次,每次併發測試的時長為180S,同一併發壓測結果取平均值進行分析

可以看到如下結果

  • 線程數在100以內,兩者各項指標相當
  • 線程數大於100,且繼續增加線程的過程中,相比MySQL,人大金倉TPS、QPS均有明顯下降

8.png9.png10.png11.png

Leave a Reply

Your email address will not be published. Required fields are marked *