Google Code Prettify

2018年6月3日 星期日

讓自己開發的系統 擁有較好的穩定性


把工作上的救火經驗,匯集成一點點心得分享
希望能幫到一些新手

https://yulinliu.gitbook.io/share/

2016年7月14日 星期四

Generate Swagger Specification

在網路上與官方網站的範例大多是在 Application Server 上產生 swagger.json

但這種方法會讓 Server 浪費資源,也有漏洞的風險

    Swagger高危漏洞,影響Html、PHP、Java和 Ruby等開發應用
    原文網址:https://read01.com/Lz7eJg.html

最近終於找到能獨立產出 swagger.json 的方式,程式碼如下

2016年3月5日 星期六

Distributed Load Testing Tool

Tsung http://tsung.erlang-projects.org/

這一套壓力測式的工具,設定相當方便 也提供相關數據圖表

需在每個 Client Node 安裝 Tsung 與 設定 SSH Authorized 登入,才能順利分散壓力

SSH Authorized 設定範例

  • cd /root
  • ssh-keygen -t rsa
  • cd .ssh
  • cat id_rsa.pub > authorized_keys
  • chmod 600 authorized_keys
  • ssh-copy-id root@ClientNode

Tsung Install

  • yum install erlang gnuplot libtemplate-perl liberation-sans-fonts perl-Template-Toolkit
  • wget http://tsung.erlang-projects.org/dist/tsung-1.6.0.tar.gz
  • tar zxvf tsung-1.6.0.tar.gz
  • cd tsung-1.6.0
  • ./configure && make && make install

Tsung Load Test Commond

  • tsung -k -f test.xml start

Tsung Load Test Report Site

  • http://testsite:8091/es/ts_web:status

2016年2月29日 星期一

wildfly 10 add postgresql jdbc driver

1.  ./bin/jboss-cli.sh --connect

2.  module add --name=org.postgresql --slot=main --resources=/software/java/postgresql-9.4.1208.jar --dependencies=javax.api,javax.transaction.api

3.  /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgresql",driver-class-name=org.postgresql.Driver)

執行完這3個步驟,回傳 {"outcome" => "success"}
即為增加成功


2016年2月21日 星期日

Apache Kafka 9.0 需注意的地方

Apache Kafka 9.0
     Documentation  http://kafka.apache.org/documentation.html

kafka 雖然沒限制 topics 的數量,但在機器數量少時 還是需要避免這種設計方式
因為kafka 是使用 file 的儲存方式,每一個topics 至少會產生1個目錄與2個檔案

kafka cluster 中的所有檔案數量是:
     (topics * partition * replication-factor * 2) + (offsets * n)

100K topics 在 3台 kafka 主機裡,至少會產生:
     (100K * 1 * 1 * 2) +(N) = 200k + N

每台 kafka 至少要產生 200K / 3 (約66666) 的檔案,超過一般linux fs.file-max = 65536 的設定,當然這還是有辦法解決

但在每個 partition 都需要相對應的 thread 來處理,這就比較麻煩了
100K 需要多少 thread 來處理才能夠即時回應,不造成timeout?
每台硬體都要有足夠的RAM 跟 夠好的 CPU時 也許可行, 但還是避掉這種設計會比較好


在設定檔有幾個需要注意的地方
    server.properties
  • broker.id 需特別注意編號 每台主機不可重覆
  • 如果需要 delete topic,需增加 delete.topic.enable=true
    producer.properties

  • client.id 在每個 thread 不能重覆
    consumer.properties
  • group.id=PG 修改預設的group id
  • offsets.storage=kafka 設定 offset 資料存在 kafka
ZooKeeper Cluster 設定
    可參考 http://myjeeva.com/zookeeper-cluster-setup.html
    修改 zookeeper.properties

    設定 zookeeper cluster id
        mkdir /tmp/zookeeper/
        echo 1 > /tmp/zookeeper/myid (id 需特別注意編號,跟zookeeper.properties 需對應)

2016年2月15日 星期一

Jetty 參數修改

關閉 http dir view

修改 etc/webdefault.xml,  dirAllowed value 設為 false
    dirAllowed
    false

設定 classloading 優先讀 jetty resources

修改 etc/jetty-deploy.xml,在 WebAppProvider 下增加
    true

預設classloading 順序為 webapps > jetty resources > jetty lib
改完參數則會變為 jetty lib > jetty resources > webapps


webapps 下的檔案, 如果 xml  跟 war 名稱不一致 會重覆載入


Server thread 設定max thread參考計算

    thread.max > (http.acceptors + http.selectors + [http.request=1])

PostgreSQL Multi-Master 雙向複寫

安裝 PostgreSQL BDR 版本

What's BDR?
http://2ndquadrant.com/en-us/resources/bdr/

Yum Install

  1. yum install http://packages.2ndquadrant.com/postgresql-bdr94-2ndquadrant/yum-repo-rpms/postgresql-bdr94-2ndquadrant-redhat-1.0-2.noarch.rpm
      1. yum install postgresql-bdr94-bdr

設定PostgreSQL lib

     vi /etc/profile  增加下方資訊
export PATH=/usr/pgsql-9.4/bin:$PATH

Init DB

  1. service postgresql-9.4 initdb -E UTF8  --no-locale --locale=C LC_COLLATE='C' LC_CTYPE='C' -A trust -U postgres
  2. cd /var/lib/pgsql/9.4-bdr/
  3. vi data/pg_hba.conf
  4. vi data/postgresql.conf
  5. service postgresql-9.4 start
  6. chkconfig postgresql-9.4 on

Create DB

  • CREATE ROLE message LOGIN ENCRYPTED PASSWORD 'yourpassword md5' VALID UNTIL 'infinity';
  • CREATE DATABASE message WITH ENCODING='UTF8' OWNER=message TEMPLATE=template0 LC_COLLATE='C' LC_CTYPE='C' CONNECTION LIMIT=-1;

message DB, BDR Setting

##first node

    CREATE EXTENSION btree_gist;
    CREATE EXTENSION bdr;
    SELECT bdr.bdr_group_create( 
        local_node_name := 'centos1', 
        node_external_dsn := 'host=centos1 dbname=message' 
    );

##second node

    CREATE EXTENSION btree_gist;
    CREATE EXTENSION bdr;
    SELECT bdr.bdr_group_join( 
        local_node_name := 'centos2', 
        node_external_dsn := 'host=centos2 dbname=message', 
        join_using_dsn := 'host=centos1 dbname=message' 
    );

更多設定可參考quictstart