Datgs' Blog

Quyết chiến quyết thắng !

Archive for the category “Network”

OAuth là gì?

0. Mở đầu

Bài viết này dành cho những người chưa hiểu cơ bản về OAuth và Single Sign On.

OAuth là gì? Đó là câu hỏi không dễ đối với những người chưa từng làm việc với SSO (Single Sign On). Thực ra thì Single Sign On không liên quan gì mấy đến nội dung của OAuth. Tuy nhiên chúng hay đi liền với nhau. Vì vậy cũng phải có sự phân biệt cho khỏi nhầm lẫn.

  1. Single Sign On là việc bạn có thể đăng nhập vào một website (như google.com) và sử dụng đăng nhập đó trên các website khác.
    • Vì vậy SSO là một tiện ích
    • Thường được sử dụng trên các website liên quan mật thiết đến nhau
    • Tiện ích SSO có nhiều phương pháp để thực hiện, SAML là một trong các phương pháp đó
  2. OAuth là phương pháp chia sẻ tài nguyên giữa các ứng dụng mà không phải đưa ra “giấy thông hành” là username và password.
    • Do đó, OAuth là một phương pháp
    • Thường được sử dụng trên các website … chả liên quan gì nhau (thực ra là có liên quan đấy, nhưng về mặt bản chất chúng có thể hoạt động mà chẳng cần gì đến nhau, việc kết nối là để xin chút tài nguyên thôi).
Ngoài ra, bạn cũng phải phân biệt giữa hai từ Authorization và Authentication. Từ thứ 2 đơn giản là “đăng nhập” hay không, còn từ thứ nhất là “có quyền” hay không. Cần chú ý chúng khác nhau nhiều lắm, đôi khi bạn chẳng cần “đăng nhập” bạn cũng có thể “có quyền”. Ý của tôi ở đây là Authentication thường liên quan đến việc bạn phải “đăng nhập” vào hệ thống. Còn Authorization tức “có quyền” trên tài nguyên hệ thống hay không thì bạn phải yêu cầu chủ thể của tài nguyên cho phép bạn.
Nói vậy thì hơi lan man, bạn có thể bỏ qua đừng suy nghĩ gì về đoạn giải thích như đánh đố trên.
Xin được đi chi tiết hơn về OAuth, nội dung của nó thì không mới, các hãng lớn như Google, Aol, Yahoo… đều có các phương pháp Authorization của riêng mình. Nhưng nó khiến các bên thứ ba khó khăn khi tích hợp với họ. Vì vậy họ họp nhau lại để tạo ra chuẩn Open Authorization.
1. Bắt đầu với Authorization, cụ thể là OAuth bạn phải phân biệt được những bên liên quan như sau
  • Client: là ứng dụng (chú ý là một ứng dụng, có thể là ứng dụng Desktop, cũng có thể là website của bạn như http://www.youbrainy.com
    ), muốn có quyền sử dụng tài nguyên của Server
  • Server: là một ứng dụng khác,  chẳng hạn như google.com.
  • You: chính bạn, bạn có tài nguyên trên Server và bạn muốn cho Client quyền sử dụng nó
Tóm lại: OAuth là phương pháp để Client sử dụng được tài nguyên của You bên phía Server
2. Phân biệt hai loại OAuth
  • 2-legged OAuth: là kiểu Authorization trong đó vai trò của You và Client là như nhau. Tức là Client chính là You của Server. Đó là kịch bản Client-Server thông thường.
  • 3-legged OAuth: là kiểu Authorization trong đó You và Client là phân biệt. Client muốn You chia sẻ tài nguyên đã có bên phía Server.
3. Cách OAuth hoạt động
3.1. 2- legged OAuth
  1. Client đăng ký sử dụng dịch vụ với Server
  2. Server cho Client
    • CONSUMER_KEY
    • CONSUMER_SECRET_KEY
  3. Client sử dụng các keys trên để thực hiện Authorization
3.2. 3- legged OAuth
  1. Client đăng ký sử dụng dịch vụ với Server
  2. Server cho Client
    • CONSUMER_KEY
    • CONSUMER_SECRET_KEY
  3. You có tài nguyên ở Server
  4. You sử dụng dịch vụ ở Client, Client yêu cầu You cho phép khai thác tài nguyên của You ở Server
  5. Client yêu cầu Server gửi REQUEST_TOKEN cho You
  6. Client chuyển You đến Server Authentication
  7. You đăng nhập vào Server, Server hỏi You có muốn chia sẻ quyền khai thác dữ liệu cho Client hay không
  8. You đồng ý, Server chuyển You về Client kèm theo ACCESS_TOKEN
  9.  Client sử dụng ACCESS_TOKEN để thực hiện thao tác trên các tài nguyên của You thuộc Server
4. Chú ý khi cài đặt với PHP
  1. Các trang tích hợp OAuth phần lớn hỗ trợ thư viện để bạn có thể dễ dàng cấu hình OAuth
  2. Nếu trong tình huống xấu, bạn chính là người cung cấp dịch vụ và muốn cung cấp mã nguồn tích hợp OAuth với dịch vụ của bạn. Thì bạn phải code rùi. Tất nhiên đây là trường hợp chủ động
  3. Nếu bên cung cấp dịch vụ ỉm đi, không cho bạn cái gì sất. Bạn phải code phần client chẳng hạn. Bạn nên tìm hiểu các thư viện sẵn có để học hỏi. Như Zend_OAuth chẳng hạn.
5. Tài liệu

Content Delivery Network là gì?

Dịch thô “Mạng phân phát nội dung” (CND). Đúng như cái tên của nó, đây là mạng lưới các máy chủ chứa các nội dung giống nhau, được đặt ở nhiều vị trí khác nhau trên quả đất (mật độ đặt phụ thuộc vào mật độ truy cập của vùng địa lý đó). Mạng phát tán nội dung giúp cho máy khách tìm được thông tin nhanh nhất ở máy chủ gần mình nhất. Và quan trọng hơn cả là giảm được băng thông lên một máy chủ duy nhất (nếu không dùng CDN). Tránh được việc quá tải lên máy chủ trung tâm.

Đây là điều mà tất cả những ai quan tâm đến phát triển dịch vụ trên internet đều phải quan tâm.

Thông thường các mạng sau cần phải có CDN

1. Những website lớn, cung cấp nội dung trên diện rộng (địa lý) và có nhiều người truy cập đồng thời

2. Những mạng truyền hình cáp

3. Repository của các phiên bản Linux (như Ubuntu chẳng hạn). Mỗi quốc gia có một mirror riêng, giúp cho việc tải và cài đặt các phần mềm diễn ra nhanh chóng…

Mercury Load Runner Analysis – Phân tích kết quả load test

Mercury Load Runner Analysis

Updated Jul 14th 2010

0) Quan trọng

Mỗi một báo cáo của load runner cho thấy hệ thống ứng dụng của chúng ta có đáp ứng được một số lượng người dùng nhất định hay không. Nếu tức là ổn. Nếu không có thể dựa vào từng biểu đồ để tìm ra nguyên nhân và khắc phục. Nếu đó là do throughput quá lớn (quá băng thông) thì phải tìm cách tăng băng thông. Nếu response sai khác với hit thì phải xem webserver có hoạt động tốt, code có ổn.

Kết quả load test cho ta cái nhìn về khả năng chịu đựng của hệ thống. Nếu như kết quả cho thấy hệ thống đã quá tải, thì cần phải có những đáp ứng như mở rộng băng thông, tối ưu hóa code, áp dụng load balancing …

1) Biểu đồ running vusers

Là biều đồ thể hiện số lượng người dùng đồng thời truy cập vào ứng dụng theo thời gian.

Đây là biểu đồ mang thông tin đơn giản nhất nhưng lại là tham số quan trọng nhất, bởi vì các kết quả ở biểu đồ khác, đều phải đối chứng với thông tin ở biểu đồ này.

Trong trường hợp biểu đồ ở trên, có thể thấy ngay là ở thời điểm5 phút, có gần 100 người dùng đồng thời. Ở thời điểm 10 phút, có khoảng 50 và 15 phút không có ai. Nhưng từ 20 phút trở đi, số lượng ổn định mức 50 người dùng đồng thời.

2) Biểu đồ hits per second

Là biều đồ về số lượng request/giây tới server theo thời gian.

Trong trường hợp ở trên, ở thời điểm 5 phút, ứng với 100 users đồng thời, có khoảng 40 requests/giây tới server. Thời điểm 10 phút, 50 user có khoảng 30 request đồng thời. Thời điểm 15 phút, 0 users hầu như không có request nào. Sau đó thời điểm 20 phút, tuy có 50 user nhưng cũng không có requests nao (có thể là do vuser của bạn không có hành động nào tiếp theo).

3) Biểu đồ lưu lượng

Là biểu đồ lượng dữ liệu trao đổi với server theo thời gian.

Ở trên, có thể thấy ứng với 100 users (5 phút) là 250000  bytes/s, 50 user là khoảng 200000 bytes/s, 0 user là ~0 bytes.

Biều đồ lưu lượng giúp chúng ta tính toán được băng thông cần thiết để đáp ứng được số người dùng đồng thời.

4) Biểu đồ lượng đáp ứng yêu cầu của http

Là biều đồ thể hiện khả năng đáp ứng của webserver với số lượng người dùng tương ứng.

Biểu đồ này mà giống với biều đồ hits per second thì hệ thống của bạn vẫn đáp ứng được lượng người dùng. Ngược lại, tức là server đã quá tải, cần phải sử dụng tới các giải pháp tối ưu hóa code, hoặc chia tải (load balancing).

5) Biều đồ thời gian tiếp trung bình giữa server với client

Là biểu đồ thể hiện thời gian trung bình của các action (hành động của vuser, tên, số lượng action là do chúng ta định nghĩa khi tạo vuser).

Ví dụ ở biểu đồ trên, ta có thể thấy thời gian trung bình của hành động login là 74 giây / 100 users, tức là mỗi user mất khoảng 0.7 giây cho quá trình login.

Đây là con số chấp nhận được. Còn nếu con số này lên khoảng >5 giây cho login thì rõ ràng module login của chúng ta có vấn đề lớn.

6) Biều đồ tóm tắt chung

Là biều đồ tóm tắt về sự thành công/thất bại trong quá trình thực hiện test. Dựa vào tỉ lệ pass/fail mà ta có hình dung về mức độ chấp nhận được hay không của hệ thống.

Như ở biểu đồ này, các transaction fail là rất nhiều. Chứng tỏ hệ thống không thể chịu được tải ở mức 100 người dùng đồng thời (xem ở biểu đồ 1).

Tiers và Layers

Dân IT thì chẳng ai là không biết Tier và Layer và cũng thường sử dụng phiên phiến. Nhưng ở đây có những sự khác biệt:

Layers: cách bạn tổ chức mã nguồn thành các tầng logic, và đơn thuần chỉ là như vậy. Đơn giản nhất là trong lập trình .NET thường nói đến 3tiers: Presentation , Business và Data (nhưng về mặt logic chỉ có thể coi là 3 layers)

Tier: Là nói đến mức vật lý, cụ thể hơn, tier trực tiếp nói về nơi mà mã nguồn được thực thi. Tức là nơi mà layer được triển khai.

Ví dụ nói đến DATA TIER là nói đến database, filesystem … nhưng ngay tại DATA TIER đã cài đặt trong đó những logic layer… (sẽ update sau)

Cấu hình subdomain với DNS, Apache và các sử dụng trong PHP

http://andy.sinaptix.com/2007/08/22/username-as-subdomain-in-codeigniter

http://ma.tt/2003/10/wildcard-dns-and-sub-domains/

I’ve been wondering for a while if I can do automatic subdomain using username, same as WordPress MU does. Some thought come across and all leads to same point , the $base_url() variable.

What makes me a bit wary is that particular variable reside in config file, which suppose to be static. On the other hand, manipulating the variable in controller is easy but redundant. So what the heck…
There are three places to modify for this :

  1. DNS entry
  2. Apache vhost
  3. Codeigniter config.php

Life has been good to me since I have full control over those three, I have my own DNS server, and apache server, so if you are less fortunate than I am, do not hesitate to nag , beg and annoy your hosting company to do changes for you

DNS entry :

make sure you put wildcard entry :
mygreatsite.com. A 123.123.123.001
*.mygreatsite.com. A 123.123.123.001

Apache vhost :

We use separate vhost file for each domain, and include those files using Apache “Include” directive, to keep things tidy and avoid fiddling with main apache config.
<virtualhost>
ServerName mygreatsite.com
ServerAlias *.mygreatsite.com
ServerAdmin superduperadmin@superduperwebcompany.com
#RedirectMatch 301 (.*) http://mygreatsite.com$1
DocumentRoot /var/oi/keepcodeigniterhere
<directory>
Options Indexes FollowSymLinks MultiViews
</directory>
AllowOverride All
Order allow,deny
allow from all
</virtualhost>

the most important part is :
#RedirectMatch 301 (.*) http://mygreatsite.com$1
CodeIgniter config.php :

I test using this simple hack ( on the config.php ) :
$config['base_url'] = “http://”.$_SERVER["HTTP_HOST"];

And wala !! I can test using whatever.mygreatsite.com and codeigniter still working as if there is nothing wrong with $base_url variable, therefore you can use any words ( hence, wildcard ) as subdomain prefix and apache will direct the request to the same codeigniter installation. Next step I will do is using username as subdomain, eliminating ugly url like
http://www.mygreatsite.com/someuser/profile
and make it nicer as in
http://someuser.mygreatsite.com/profile
Nice !!
Yeah I know I have to test rigorously to ensure nothing is broken with codeigniter ( and my application ) but at this moment I think it leads to the right direction.
I also do some search at CodeIgniter’s forum just to verify my method and I’ve found great reference :
http://codeigniter.com/forums/viewthread/51627/

For wildcard DNS, take a look at this guide by WordPress creator :
http://photomatt.net/2003/10/10/wildcard-dns-and-sub-domains/

Apache modules

mod_evasive

mod_evasive is an evasive maneuvers module for Apache to provide evasive action in the event of an HTTP DoS or DDoS attack or brute force attack. It is also designed to be a detection and network management tool, and can be easily configured to talk to ipchains, firewalls, routers, and etcetera. mod_evasive presently reports abuses via email and syslog facilities.

Chuyển cổng dịch vụ (Port forwarding)

NAT DMZ

NAT: Network Address Translation

Theo tôi hiểu thì nó dịch địa chỉ mạng.

Tại sao lại cần phải dịch địa chỉ mạng thì tôi xin được thay cho những lời giải thích dài dòng bằng một ví dụ đơn giản như thế này.

Giả sử khi bạn kết nối internet thì ISP ( Internet Service Provider) sẽ cấp cho bạn 1 địa chỉ IP public (ví dụ 203.255.12.4), số IP này sẽ được sử dụng để giao tiếp với thế giới internet bên ngoài chính vì thế bạn có thể truy cập vào các website như  www.nhatnghe.com chẳng hạn, khi bạn truy cập vào trang này thì giữa máy tính ở nhà của bạn sẽ giao tiếp với www.nhatnghe.com, cụ thể bạn có thể coi thông tin được …nhưng làm sao để trang www.nhatnghe.com gửi dữ liệu (những cái bạn đang coi)về máy tính của nhà bạn được? thì nó đã dùng cơ chế NAT( nếu bạn kết nối theo kiểu PPOE).

Vì IP trong mạng Lan của bạn là IP internal ( ví dụ lớp C: 192.168.X.0/24 ) và IP đi ra ngoài thế giới internet để giao tiếp với trang www.nhatnghe.com là IP mà moderm ADSL được cấp ( 203.255.12.4 ), 2 dãy IP này hoàn toàn khác nhau.
Cơ chế nó hoạt động như sau:

Khi bạn Enter để gửi dữ liệu đi thì tức là bạn đã gửi 1 gói dữ liệu đi, gói này gồm có các thành phần sau: source add, source port(port ứng dụng ),dest add(nhatnghe.com chang hạn), dữ liệu gửi đi. dữ liệu sẽ đi từ máy bạn rồi wa cái moderm ADSL. Tại đây cái moderm ADSL nó sẽ cho mượn cái số ISP cấp là 203.255.12.4 và ghi lại source add của cái máy tính gửi dữ liệu đó sau đó nó sẽ gửi ra internet…đi 1 hồi lòng vòng trên mạng rồi nó tới trang www.Nhatnghe.com và nhatnghe.com sẽ nhận cái gói dữ liệu đó và nó gửi trả lời về cho bạn qua cái IP 203.255.12.4 dữ liệu gửi về có dạng gói gồm : source add ( nhatnghe.com),source port(port random>1024),dest add(203.255.12.4),data … nó sẽ đi tới moderm ADSL và tới đây cái moderm ADSL sẽ dựa vào ip souce mà nó mới cho mươn cái IP 203.255.12.4 đễ chuyển vềmáy có IP internal là 192.168.X.số … và bạn thấy được nội dung của trang web nhatnghe.com ok. Công việc moderm ADSL cho mượn IP và dịch IP sau đó phân phát dữ liệu vào máy nào trong mạng LAN gọi là NAT.
Nat trên máy tính cũng có ý nghĩa tương tự vậy.

bạn chỉ vào phần DMZ của modem, điền IP 192.168.1.2 vào, thế là tất cả các port vào 192.168.1.2 được mở toang ra, nói cách khác máy bạn hoàn toàn bị thế giới bên ngoài thấy, giống như  sử dụng modem không có chức năng router.

Hướng dẫn Port forwarding, Port, NAT và DMZ

(cám ơn bạn thuvn205 từ diễn đàn khoa học phổ thông)

source: http://khoahocphothong.net/forum/archive/index.php/t-83800.html

Đây là bài hướng dẫn cơ bản về Port forwarding vì đây là cái việc khó khăn nhất để có thể phát huy sức mạnh của phương pháp chia sẻ bằng Bittorrent. Ngay từ ngày đầu sử dụng torrent client mình đã toan tính từ bỏ hình thức này ít nhất là 1 lần vì khá phức tạp, nhưng khi hoàn tất công việc thì quả rất tuyệt vời nên mình share cái này cho các newbie đỡ cực nhọc.

NAT là gì?
Như chúng ta biết, trong hệ thống mạng máy tính thì quá trình chuyển đổi địa chỉ mạng (Network Address Translation – NAT ) là công việc liên quan tới việc ghi lại các địa chỉ nguồn gốc/điểm tới của các gói dữ liệu vận chuyển qua Router/Firewall ta gọi là NAT.

Port forwarding là gì?
Port forwarding là quá trình chuyển một port cụ thể trong hệ thống mạng cục bộ LAN từ một client/terminal/node qua một client/terminal/node của một network khác, điều này sẽ cho phép các clients/terminals/nodes bên ngoài có thể truy cập vào clients/terminals/nodes trong mạng LAN bằng cách sử dụng cái port đó từ bên ngoài thông qua cái Router/Modem/Firewall đã mở chức năng NAT.

Như vậy, các máy tính từ xa (máy vòng quanh thế giới trên internet ấy) sẽ sử dụng Port forwarding để kết nối với một máy tính khác trong mạng LAN và đây cũng chính là cách mà các chương trình Torrent sử dụng để chia sẻ file giữa 2 máy tính với nhau nên ta còn gọi là peer to peer (PP) sharing đó.

Port là gì?
Khi chúng ta kết nối vào Internet thì có rất nhiều đường vận chuyển dữ liệu khác nhau được sử dụng, máy vi tính sẽ âm thầm điều hành một cách chính xác các công việc vận chuyển đó thông qua rất nhiều port khác nhau. VD: Giao thức MSN hay dùng các port: 6891-6900, Giao thức HTTP thì hay dùng port 80…

ADSL Router/DSL Router liên quan gì?
Chúng ta cần lưu ý là các DSL/ADSL Router sẽ phân máy tính chúng ta ra làm 2 vòng:

- Vòng 1 thì là Private LAN, các máy tính trong Private LAN này thì gọi là các Local IP, Private IP. Các Private IP này nếu được modem cấp phát tự động thông qua chức năng DHCP thì gọi là IP động, khi ta Forward port thì cần điền vào một IP cố định còn gọi là IP tĩnh.

- Vòng 2 là WAN (Wide Area Network), tại đây thì các IP được nhà cung cấp dịch vụ như FPT,Viettel,VDC,Netnam cung cấp cho ta để kết nối ta ra Internet. Tuỳ theo gói dịch vụ ta sẽ có IP tĩnh (cố định) hay IP động (thay đổi mỗi khi tắt modem).

Các router này sẽ chịu trách nhiệm trong việc điều khiển lưu lượng dữ liệu tới các máy tính khác nhau connect vô, nó cũng sử dụng chức năng Port forward để điều khiển các gói dữ liệu tới các máy tính khác nhau thông qua các port. Các router này thường tích hợp thêm Firewall để ngăn chặn các cuộc gọi (luồng truy cập) in/out ngoài luồng không khai báo vì vậy khi chúng ta làm công việc Port forward chính là ta khai báo luồng truy cập để các gói dữ liệu không bị chặn lại khi download/upload torrent.

Ví dụ đây, khi ta đã khai báo mở port 6881 thì các gói dữ liệu (xanh) sẽ được router chuyển về đúng máy đích. Nhưng cái port 1111 chưa khai báo và cái IP 192.168.0.1 và 192.168.0.2 không phải là IP của Router nên các gói dữ liệu bị loại bỏ (xem hình).

Port Fowarding

Port Fowarding

Port forwarding
Hiện tại chúng ta thấy có rất nhiều loại DSL/ADSL Router và tất nhiên mỗi loại lại có giao diện người dùng hoàn toàn khác nhau khi cấu hình cái pord forwarding. Do vậy bạn cần mở tài liệu sử dụng của modem ra xem cách truy cập vào trang cài đặt như thế nào.

Ví dụ cái LINKSYS:
- IP address is 192.168.1.1 và ID, password mặc định như sau:
username = admin
password = admin

Thông thường, có hai cách để mở port máy mình ra Internet nhằm truy cập qua lại giữa các máy tính trong LAN và ngoài Internet trên hầu hết các DSL/ADSL Router là DMZ và port forward.

- DMZ: khi thêm (add) một IP (một computer) vào DMZ thì lập tức cái máy có IP đó sẽ mở hết các cổng ra Internet, tức là sẽ chẳng còn firewall nữa.

- Port forward là việc cần thiết để mở cửa giữa máy mình (seeder/leech) và máy người kia (peer/leech) để đạt được tốc độ transfer giữa hai máy một cách tối ưu (cao nhất). Đa số các DSL Router hoặc DSL Modem có NAT đều sử dụng firewall để chặn các dòng truy cập từ các máy trong LAN (internal network) với mạng Internet, một đường mòn được đào (open/ forward) xuyên qua firewall để các máy tính trong LAN có thể truy cập vào được với máy tính ngoài Internet thông qua 1 cổng (port) xác định ta gọi là port forward.

Chính vì vậy port forward là giải pháp an toàn hơn khi mở cổng máy mình với Internet cho dù khó cấu hình hơn sử dụng DMZ vì chỉ có 1 port (hoặc vài port) được mở.

Nếu máy bạn có chức năng DMZ thì Enable nó và add một IP vô chỗ đó (ví dụ: 10.0.0.7), sau đó vào phần Network Connection của Microsoft Windows và điền cái IP này vô cho LAN Connection: Right click vào Local Area Connection–> Internet Protocol (TCP/IP) –>điền cái IP, subnet mask, default gateway.

VD của mình:
IP address: 10.0.0.7
subnet mask: 255.0.0.0
default gateway: 10.0.0.2 (cái nì là của ZOOM modem)
Preferred DNS Server: 203.162.4.190 (VDC) / 210.245.31.130 (FPT) / 203.113.131.1 (Viettel)
Alternate DNS server: 203.162.4.191 (VDC) / 210.245.31.10 (FPT) / 203.113.131.2 (Viettel)
Đặc biệt ku này chạy cực nhanh tặng cho mấy 8 đây
Preferred DNS Server: 208.67.222.222
Alternate DNS Server: 208.67.222.220
Mấy cái DNS này mình lấy theo Origin là của luxubu cung cấp.

Nếu không có chức năng DMZ thì bạn phải làm port forward, cái này tùy theo từng Version modem sẽ có cách làm khác nhau. Bạn lật mặt sau xem Modem của bạn có serial là bu nhiêu rồi vào đây xem cách mở port nhé:

(http://www.portforward.com/english/routers/port_forwarding/routerindex.htm)

Chỉ có cách mở port thì bạn download file bằng torrent mới nhanh được vì hai máy communicate được với nhau, tuy nhiên tốc độ down cũng dựa vào tốc độ bạn up lên đó nhé. :)

Lựa chọn HTTP Server, tối đa lượng truy cập đồng thời

Theo
Cong Dang Chien hatza700@gmail.com;
phpvietnam@googlegroups.com

Ở công ty, nhóm mình đang maintenace cho một hệ thống quản lý quảng cáo dựa trên OpenX. Hiện hệ thống bọn mình mới chỉ chạy tạm trên một server Xeon QuadCore 2Ghz. 

Mới đầu cài Apache thì chỉ khoảng 400 kết nối TCP đồng thời là chết.

Khi cài lighttpd, mới cấu hình đơn giản thôi, chưa tối ưu thật sự thì hệ thống chịu được 900 kết nối TCP mà vẫn chưa sao. Đây là kết nối thật đó, chứ không phải bọn mình load test đâu. Còn khi bọn mình load test ở bằng PC quadcore của bọn mình thì hệ thống chịu đc 3000 kết nối.

Nói chung apache quản lý các kết nối đồng thời kém hơn lighty. Nhưng thằng khủng nhất hiện nay là Nginx. Bác nào chịu khó mày mò tiếng Nga (nó có tài liệu tiếng anh nhưng ko nhiều) thì thử cài xem.

Có môt chú kĩ sư ở wordpress khoe cài đặt được một con load balancing dựa trên Nginx chịu đc 8000 kết nối đồng thời thật (ko phải là load test). Căn bản yêu cầu bài toán ở cty mình chỉ cần mức lighttpd nên mình cũng ko có nhu cầu tối ưu thêm làm gì.

Clustering – phân cụm máy tính

Clustering là một công nghệ sử dụng các máy tính riêng lẻ thành các tổ hợp (cụm) (chủ yếu áp dụng cho máy chủ) nhằm mục đích:

  • nâng cao khả năng sẵn sàng cho các hệ thống máy tính bao gồm việc đảm bảo hệ thống vẫn hoạt động bình thường nếu có một máy chủ hỏng hóc và giảm thiểu lỗi do hệ thống gây ra
  • fail-over: dễ dàng cho người quản lí bảo trì các máy chủ (gỡ một máy chủ ra khỏi cụm, một máy khác sẽ làm thay những công việc của máy chủ bị thay thế đó)
  • fail-back: phục hồi lại tài nguyên của một máy chủ

Hoạt động dưới kiến trúc song song hoặc phân tán.

RAS – Relidability, Availability, Scalability là 3 tiêu chí khi phân cụm máy tính

Cấu trúc phân cụm (cluster) được tổ chức dưới hình thức Farm hay Pack

Cluster Farm là một nhóm các máy chủ chạy các dịch vụ giống nhau, nhưng không dùng chung cơ sở dữ liệu. Được gọi là farm (trang trại) bởi vì chúng xử lý bất cứ yêu cầu nào gửi đến cho chúng bằng các bản sao cơ sở dữ liệu (tài nguyên) giống hệt nhau được lưu giữ cục bộ, chứ không dùng chung một bản cơ sở dữ liệu. Cũng bởi tính chất này nên các máy chủ thành viên của farm làm việc độc lập và chúng được gọi là clone (clone là máy tính được thiết kế để mô phỏng chức năng của máy tính khác).

  •  Sử dụng Farm, tức là sử dụng các máy chủ hoạt động giống hệt như nhau trong cùng một cụm.
  • Sử dụng Farm, tức là các máy trong cụm có dữ liệu hệt như nhau.
  • Thường sử dụng Farm cho các mạng có lượng truy cập lớn, nhưng lượng dữ liệu thì không quá lớn.

Cluster Pack là một nhóm các máy chủ hoạt động cùng với nhau và chia sẻ với nhau các phần của cơ sở dữ liệu. Được gọi là pack (gói) vì sự hoạt động của các máy chủ thành viên của pack có liên hệ chặt chẽ với nhau và chúng làm việc theo một phương thức thống nhất để quản lý và duy trì các dịch vụ.

  • sử dụng pack, nghĩa là các máy trong cụm có dữ liệu khác nhau cho cùng một mục đích.
  • Thường sử dụng pack khi mạng có lượng dữ liệu cực lớn.

Ví dụ, một hệ thống cluster server có thể chứa dữ liệu theo kiểu:

  • Database Server 1, chứa dữ liệu của các users từ  A-F
  • Database Server 2, chứa dữ liệu cảu các users từ  G-H 
  • … 

Trong các thiết kế, hầu hết các tầng font-end và middle-tiers (phần giải thuật, chạy mã …) sử dụng Farm. Còn back-end sử dụng Pack. Điều này cũng không khó để lý giải.

Nguyên lý thiết kế hệ thống cluster (update later…)

  • Hệ điều hành cluster, cơ sở dữ liệu cluster.
  • Tính toán được nhu cầu sử dụng để phân cụm Farm / Pack thích hợp. Thông thường sẽ sử dụng Farm ở Front-end, middle-services. Sử dụng Pack ở back-end, database services.

Một ví dụ điển hình

 

Cụm máy chủ sử dụng cluster và loadbalancing

Cụm máy chủ sử dụng cluster và loadbalancing

 

 

Kết luận: cứ cấu hình công suất sử dụng và mua thiết bị là có mạng khủng. Không cần phải quan tâm quá nhiều đến câu hỏi khi mạng quá lớn thì sẽ phải làm sao. Có $ là có mạng khủng :D

Why Load Balancing – Tại sao lại phải cân bằng tải ?

Đơn giản, khi hệ thống của bạn có quá nhiều người sử dụng, một máy chủ đơn lẻ không thể đáp ứng được các yêu cầu của các đối tượng sử dụng. Bạn cần phải chia sẻ công việc của máy chủ hiện tại với một máy chủ khác. Tức là sử dụng cùng một lúc nhiều máy chủ, và việc tải dữ liệu từ máy chủ nào phụ thuộc vào quyết định của bộ cân bằng tải.

Ngoài ra, với các hệ thống đóng vai trò quan trọng với doanh nghiệp, như doanh nghiệp trong ngành ngân hàng chẳng hạn… việc sử dụng hai máy chủ trở lên là điều gần như chắc chắn. Bởi vì, không có gì đảm bảo một chiếc máy hoạt động trơn tru và hoàn hảo mãi. Khi máy này gặp sự cố, máy còn lại phải ngay lập tức làm thay phần việc mà máy bị hỏng đang làm, để không làm gián đoạn hoạt động của doanh nghiệp. Bởi vì, những tổn thất do hệ thống thông tin ngừng hoạt động là cực kỳ to lớn và không thể lường trước được.

Post Navigation

Follow

Get every new post delivered to your Inbox.