CategoryLinux相關

Java Web 另一個選擇 Resin

兩年前曾經碰過的一套Java Web Server

當初是因為總監的要求才去研究,實際摸過之後發現其實效能很好

正常的Java Web 都是 Apache + Tomcat

然後開始有人用 Nginx + Tomcat

最後我是摸到了 Nginx + Resin

如果沒被修改掉的話,Yiabi應該還是我們當初建置的 Nginx + Resin 架構

 

首先官網是 http://caucho.com/

右上角就可以下載,這個是手動編譯版本

下載tar.gz版本之後 解壓縮 進到目錄之後編譯

#/configure –prefix=/usr/local/resin

#修改設定檔

cd /usr/local/resin/conf

vi resin.properties

#註解拿掉

#web_admin_external : true
#port也在此修改
#修改設定vi resin.xml

修改webapp id與路徑

<web-app id=”/Maltese” root-directory=”/home/webuser/ResinJservRoot/Maltese”/>

修改自動deploy路徑設定
web-app-deploy path=”/home/webuser/ResinJservRoot”

如果有買專業版本的話,有cache機制可以使用

修改cache參數
vi resin.xml

在cluster 內增加
<server-header> </server-header>
<resin:if test=”${resin.professional}”>
<cache memory-size=”64M”>
<rewrite-vary-as-private/>
</cache>
</resin:if>

 

在<web-app-deploy 底下增加
<web-app-default>
<prologue>
<allow-servlet-el/>
</prologue>

<session-config>
<use-persistent-store/>
<enable-url-rewriting>false</enable-url-rewriting>
</session-config>

<resin:if test=”${resin.professional}”>
<cache-mapping url-pattern=”/” max-age=”5s”/>
<cache-mapping url-pattern=”*.gif” max-age=”60m”/>
<cache-mapping url-pattern=”*.jpg” max-age=”60m”/>
<cache-mapping url-pattern=”*.png” max-age=”60m”/>
<cache-mapping url-pattern=”*.css” max-age=”60s”/>
<cache-mapping url-pattern=”*.js” max-age=”60s”/>
</resin:if>
</web-app-default>

接著是啟動與停止指令
啟動
/usr/local/resin/bin/resin.sh start
停止
/usr/local/resin/bin/resin.sh stop

效能上來說比tomcat快上約40%

不過免費版本最好的就是搭配Nginx使用

比較彈性也方便

HTTP2-設定相關

昨天前同事給了我一篇資訊

關於HTTP2的資訊

https://blog.alphacamp.co/2016/07/12/http2/

我自己將自己的部落格設定了一下

簡單的流程有三個步驟

1.SSL憑證,有免費的,當然最好是花錢

2.WEB SERVER的設定(apache、nginx相關)

3.驗證(確認http2成功)

 

SSL憑證的話,申請流程網路上都有,這邊就帶過

我這邊主要是調整NGINX的設定

NGINX如果要支援http2的話,需要在1.9x以上,我是直接安裝1.10

設定大致上是如下圖,我設定得比較簡單,當然也可以很嚴謹

擷取

主要是 http轉https

與SSL的 http2設定

還有SSL KEY等等的資訊

另外就是 HSTS的Header等

詳細參數如下列

ssl_certificate /etc/nginx/ssl/certificate.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ‘ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS’;
ssl_prefer_server_ciphers on;

add_header Strict-Transport-Security max-age=15768000;

 

然後就是驗證,使用下面這個網址

https://tools.keycdn.com/http2-test

然後填上你的網址 例如 www.kilait.com

擷取

HTTP2通過

自建Queue 伺服器

因AWS地區政策的關係

大陸地區的AWS必須另外獨立申請

而非大陸當地的公司基本上拿不太到權限

對於有當地需求的公司來說(例如小弟公司)

AWS就等於死一半了

雖然可以由大陸連外到其他地區的AWS服務,但網路品質慘不忍睹…

 

因架構上有使用SQS的服務,所以如果要找其他雲端服務業者

勢必要自己克服這個問題

原本是打算使用在前公司用過的Redis解決

但經同事建議,有一款Activemq 可以使用

 

大概研究了一下

以Ubuntu來說

#sudo apt-get install openjdk-7-jdk -y

#wget http://apache.stu.edu.tw/activemq/5.13.0/apache-activemq-5.13.0-bin.tar.gz

#tar zxvf apache-activemq-5.13.0-bin.tar.gz

#cd apache-activemq-5.13.0/

#cd bin

#./activemq start

只要PORT有啟動即可

http://127.0.0.1:8161/admin

預設帳密admin/admin  如果可以登入就可以使用了

 

PHP5 OPcache

今天同事丟了關於PHP5的效能優化文章給我

主要講的就是 OPcache ,我大概研究了一下

嗯,這是我摸過的東西

前身就是 Zend 的 Optimizer+

大概早期有架過LAMP,或是LNMP都會摸過,用tar.gz安裝的話都要另外編譯這個

只是5.3~5.4那段時間不支援,要另外裝

5.5之後就變成OPcache內建了

主要的說明可以點這裡

 

至於安裝的話 不管是APACHE或NGINX都支援 在PHP5.5是內建的

詳細的安裝說明請點我

 

然後我無意見發現了一個小工具可以驗證OPcache的狀態

opcache-status

只是一個網頁,安裝後開啟這個PHP網頁會看到下圖

擷取

可以簡單確認OPcache的狀況,還滿不錯的

某前公司系統架構概圖

擷取111

某前公司做類似大數據的系統架構概圖

LB由LVS進行(預計,但實際上沒做)

WEB分為抓取數據資料一台

WEB網頁呈現一台

資料收集完後不採用資料庫的方式進行儲存

改由分散式儲存系統(DFS)進行儲存,使用的為MooseFS(簡稱MFS)

 

網路架構為同一層網段,用分散式設計進行

其中還有進行Indexs索引建立的Server,後台管理的Server,編輯用Server等

就不一一列出,需要功能配合時再增加Server

 

算是比較特殊的用法,不採用資料庫的大數據

中間當然遇過許多問題,從LVS模式、MFS的CHUNK格式等等

還有儲存空間的格式化問題,inode爆掉等等

就不一一說明了

 

系統原本採用apache+tomcat7

在進行優化時測試使用 nginx+resin

效果也不錯,但之後的更新我就不清楚了

當然這套系統還是在運作當中~

某前公司系統架構概圖

擷取

DNS解析網址後進入 LB

由雙A10做HA,Nginx做備援

WEB共有14台,由admin更新程式

資料庫結構做Master/Slave 讀寫分離

 

中間網段各層級切開,一律無對外連線

對外更新需由A10進行NAT,或由Admin進行NAT

A10與Admin 合計有 100 33 66 68 四網段的網卡連接

 

講得很簡單,細節卻很多,畢竟這只是簡化的概圖

合計五個機櫃的實體數量,老實講我也不太想畫出來

當個曾經做過這種架構的筆記

Linux 臨時掛載 Swap

今天同事遇到一個問題

AWS上的開發機是最小規格 t2.micro

RAM 只有1G

加上AWS預設並沒有掛載SWAP

 

首先生成一份檔案

dd if=/dev/zero of=/var/swap.1 bs=1M count=1024

mkswap /var/swap.1

swapon /var/swap.1

就可以了

而不需要使用的時候

swapoff /var/swap.1

就可以了

 

確認時只要使用 free -m 觀察swap的空間就可以知道了

GeoIP 模組

記得之前在電商工作時

有一個需求是紀錄IP,突然想起以前用過一套工具 AWStats

而當中有一個需要注意的部份就是 GeoIP 模組

把全部的IP依照國家、程式區分

而現職也有這方面的需求,所以必須定期更新IP的資料庫

 

首先增加官方的軟體源(以下是Ubuntu)

$sudo add-apt-repository ppa:maxmind/ppa

更新並安裝

$sudo aptitude update

$sudo aptitude install geoipupdate

 

複製以下的內容至 /etc/GeoIP.conf

# The following UserId and LicenseKey are required placeholders:

UserId 999999

LicenseKey 000000000000

ProductIds GeoLite2-City GeoLite2-Country 506 517 533

 

執行

/usr/bin/geoipupdate

更新完畢的資料庫會在

/usr/share/GeoIP

 

必要時設定排程定期更新即可

 

 

SSH tunnel

如果你有一台VPS,反正現在VPS免錢的很好申請…

linode一台也才一個月六百NT…

當你需要翻牆的時候這方法比你做pptp或是l2tp還快還方便(前提是純網頁使用)

在跳板端直接KEY以下指令

ssh -NfD 跳板IP:8888 帳號@跳板IP -p22

例如

ssh -NfD 123.123.123.123:8888 kila@123.123.123.123 -p22

那個8888就是你要翻牆的port

之後請到IE或google瀏覽器設定proxy

區域網路設定->proxy伺服器(打勾)->點進階

選socks 打上跳板IP與PORT如 123.123.123.123 8888

選確定即可

這時候你的瀏覽器就走跳板出去了~

另外附上iphone的使用方法

在跳板機上建一個最簡單的WEB SERVER

把IP的指向目錄下建一支proxy.pac

內容填上

function FindProxyForURL(url, host)

{

return “SOCKS 123.123.123.123:8888”;

}

iphone設定url

http://123.123.123.123/proxy.pac

就一樣是設定翻牆出去囉~

© 2017 Kila's IT Home

Theme by Anders NorénUp ↑