Google Code Prettify

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

2016年2月13日 星期六

Distributed Lock

這幾年一直在碰 HA 相關的系統

一直有一些需求,希望這個程式能在一個 cluster 環境中,只有一台主機執行
不想用DB存相關資料,但一直找不到簡單方便的解決方法

終於發現有一個能跟 java 結合,不需另外寫script

jgroups 提供一個 LockService , 可以實現 DistributedLock

DistributedLock 可以用來做什麼?
  1. Transaction lock , 補足一些 NoSQL 不支援的問題
  2. Service running lock, 讓 Master Node 執行 job, 其它Node 則是一直等待
  3. other lock ???
寫了一個sample code 放在 git

2015年8月24日 星期一

PostgreSQL 9.3 HA Script

PostgreSQL 9.3 已經內建 Hot Standby 的機制

這時只要在加上 Linux Virtual Host, 就能達到 High Availability DB

寫了一個 shell script 在 git 上
https://github.com/yulinliu/postgres_ha

在加上網路、DB 的基本設定就可正常運作

2015年8月19日 星期三

RESTful Services 幾項重點

1. HTTP Method 對應Server處理方式
HTTP MethodData operateDescription
 POST Create Create a resource without id.
 GET Read Get a resource.
 PUT Update Update a resource or create a resource with id if not existed.
 DELETE Delete Delete a resource

2. Server Response Content Type
    JSON or XML or Text

3. 透過 HTTP Authorization 限制使用者存取資源的權限,也可用其它方式(ip、cookie)

4. response status code、error code 直接參考 http status code

5. REST 中的資源 一般是名詞 (podcasts, customers, user, accounts 等) 而不是動詞 (getPodcast, deleteUser 等)

2014年9月5日 星期五

Web Developer Runtime Map

Web Developer Runtime Map (由下往上看)