Monday, November 9, 2015

Elasticsearch 

Elasticsearch нь Apache Lucene дээр суурилсан бүтэн үгээр хайдаг хайлтын систем юм.  Жава хэл дээр хөгжүүлэгдсэн бөгөөд Apache лицэнзийн доор нээлттэй эх болон гарсан. Elasticsearch нь хоёр дахь хамгийн их ашиглагддаг хайлтын хэрэгсэл юм.
     Үүссэн түүхээс нь товчхон дурьдвал Compass хайлтын хэрэгслийг бүтээсэн 
Shay Banon гэж нөхөр уг хайлтын хэрэгслийнхээ дараагийн хувилбарыг хийх гэж байхдаа илүү уян хатан HTTP-р JSON дамжуулдаг жава-с өөр хэл дээр хэрэглэх боломжтой байх хэрэгтэй гэж бодсоны үндсэн дээр 2010 онд Elasticsearch-н анхны хувилбарыг гаргажээ. Анхны хувилбараа гаргаад удаагүй байгаа хэдий ч маш олон хэрэглэгчтэй болж чадсан хүчирхэг хайлтын хэрэгсэл юм.

Яагаад Elasticsearch-г ашиглах хэрэгтэй гэж?

Хэрвээ шинэ бүтээгдэхүүн шинэ технологи ашиглаж эхэлж байгаа бол хамгийн түрүүнд "би яагаад үүнийг ашиглах хэрэгтэй гэж" гэдэг асуултанд хариулж чаддаг хэрэгтэй байх. Яагаад Elasticsearch гэдэг асуултанд хариулах цөөн хэдэн шалтгааныг хэлье. Хамгийн түрүүнд elasticsearch нь ашиглахад солиотой амархан мөн  дэндүү бүүр дэндүү хурдан. JSON document-уудыг индекслэж хадгалсаны дараа ямар ч тохиргоо хийлгүйгээр query бэлдэж тэднийг авч чадна. Өөр бас нэг шалтгаан нь elasticsearch нь Schema-less бөгөөд ингэснээр өөрийн гэсэн mapping (document-үүдийг хэрхэн хадгалагдаж индекслэгдэх болон field нь ямар утга авах гэх мэт зүйлүүдыг тодорхойлдог процесс) тодорхойлоогүй default-аараа өгөгдлийг маш аятайханаар индекслэж өгдөг. Document хадгалахдаа Index API ашиглаж http-р put хүсэлт явуулна. Document-үүдийг id-р нь авахдаа Get API хайхдаа Search API гэх мэт ашиглана. Elasticsearch нь мөн cluster байдлаар ажилладаг бөгөөд үүнийг тохируулахад маш амархан. Хэрвээ та олон сервэртэй бөгөөд сервэр бүр дээрээ нэг elasticsearch суулган тэднийгээ нэг cluster байдлаар ажиллуулахыг хүсвэл elasticsearch.yml файл дээр нэг ижил cluster-name зааж өгч нэгийг нь мастер бусдийг нь data байдлаар ажиллуулахаар тохиргооны файл дээр зааж өгөхөд хангалттай. 

Monday, September 21, 2015

HAProxy (High Availability Proxy)


Танилцуулга
HAProxy нь түгээмэл ашиглагддаг нээлттэй эхийн програм хангамж юм.
TCP/HTTP-ын ачаалал тэнцвэржүүлэгч бөгөөд Linux, Solaris болон FreeBSD үйлдлийн систем дээр ажиллах боломжтой. Үүний хамгийн түгээмэл хэрэглээ нь олон сервэрүүдийн хоорондох ажлын ачааллыг хувиарлаж өгдөг ба ингэснээр гүйцэтгэл болон найдвартай ажиллагааг хангаж өгдөг. Та бидний сайн мэдэх Twitter, Instagram, Imgur гэх мэт өндөр зэрэглэлийн орчнуудад ашигладаг байна.

HAProxy нэр томъёо
Ачаалал тэнцвэржүүлэлт болон прокси-ийн талаар ярихад мэдэх шаардлагатай олон нэр томьёо болон ойлголтууд байдаг.

Access Control List (ACL)
Ачаалал тэнцвэржүүлэхтэй холбоотойгоор ACL буюу Access Control List нь туршилтын үр дүн дээр тулгуурлан үйлдэл хийх болон тодорхой нөхцөлүүдийг шалгахад ашигладаг. ACL-г ашигласнаар тухайн нөхцөлд тохирсон олон хүчин зүйлүүд дээр тулгуурлан уян хатан байдлаар сүлжээний урсгалыг дамжуулах боломжийг олгодог.
Жишээ нь:
acl url_blog path_beg /blog

Энэ ACL -д хэрэглэгчийн хүсэлтийн зам нь /blog гэж эхэлсэн бол тохирч байгаа юм. Жишээ нь: http://yourdomain.com/blog/blog-entry-1

Backend
Backend нь дамжуулагдсан хүсэлтүүдыг хүлээж авдаг серварүүдийн багц юм. Backend-үүд нь HAProxy тохиргооны арын хэсэгт тодорхойлогддог.
-Аль ачаалал тэнцвэрүүлэгч алгоритмийг ашиглах
-Сервэр болон портуудыг жагсаалт

Нэг backend нь нэг болон олон сервэрүүдийг агуулдаг бөгөөд backend-дээ олон сервэр нэмж өгсөнөөр олон сервэрүүд дээр ачааллаа зөв хувиарлаж өгөх боломж нэмэгдэж өгч байна гэсэн үг юм.

Дараах жишээ нь хоёулаа 80 портыг сонсож байгаа web-backend болон blog-backend нэртэй хоёр backend-н тохиргоо


backend web-backend
   balance roundrobin
   server web1 web1.yourdomain.com:80 check
   server web2 web2.yourdomain.com:80 check

backend blog-backend
   balance roundrobin
   mode http
   server blog1 blog1.yourdomain.com:80 check
   server blog1 blog1.yourdomain.com:80 check
-balance roundrobin мөр нь ачаалал тэнцвэржүүлэгчийн алгоритмыг тодорхойлж өгч байна.
-mode http мөр нь долдугаар проксиг ашиглахыг зааж өгч байна
-check нь эдгээр сервэрүүд дээр health check ашиглана гэж зааж өгч байна. Энэ нь хэрвээ сервэр унтарсан байвал тухайн сервэрийг ашиглахгүй алгасна гэсэн үг


Frontend
Frontend нь хүсэлт хэрхэн backend-үүдрүү дамжуулагдхыг тодорхойлдог. Frontend-үүд нь HAProxy-ын frontend хэсэгт тодорхойлогддог. Тэдгээрийн тодорхойлолтууд нь дараах бүрэлдэхүүн хэсгүүдээс бүрдэнэ.


  •  IP хаягуудын болон портын багц (e.g. 10.1.1.7:80, *:443, etc.)
  •  ACLs
  •  use_backend дүрмүүд, аль ACL-н нөхцөл биелсэнээс шалтгаалан аль backend-үүдыг ашиглахыг тодорхойлдог мөн default_backend буюу бусад бүх нөхцөлд аль backend байхыг тодорхойлж өгнө


Types of Load Balancing

Одоо бид ачаалал тохируулалтанд хэрэглэгддэг үндсэн бүрдэл хэсгүүдийг судлана.


No Load Balancing



Энэ жишээнд хэрэглэгч yourdomain.com домайн дээр байгаа таны web server-тэй шууд холбогдож байгаа бөгөөд ямар ч ачаалал тэнцвэржүүлэгч байхгүй. Хэрвээ таны ганц сервэр унтарвал хэрэглэгч таны web server холбогдож чадахгүй.  Нэмж хэлэхэд хэрвээ олон хэрэглэгч таны сервэррүү нэгэн зэрэг хандсан тохиолдолд энэ нь ачааллыг зохицуулж чадахгүй бөгөөд нэг бол удаж эсвэл холбогдож чадахгүй.


Layer 4 Load Balancing

Хамгийн хялбар аргаар олон сервэрүүдийн сүлжээний урсгалын ачааллыг тэнцвэржүүлэх арга бол layer 4(transport layer) ачаалал тэнцвэржүүлэх арга юм. Энэ арга нь IP хаягны интервал болон порт дээр тулгуурлан хэрэглэгчийн урсгалыг дамжуулдаг(Жишээ нь: Хэрвээ http://yourdomain.com/anything  ийм хүсэлт ирвэл yourdomain.com ны port 80 -дээрх бүх хүсэлтийг хүлээж авдаг backend-рүү шилжинэ. )




Хэрэглэгч ачаалал тэнцвэржүүлэгчрүү хандах бөгөөд хэрэгчэгчийн хүсэлтийг backend сервэрүүдрүү дамжуулна. Сонгогдсон backend сервэр хүсэлтэнд шууд хариу үзүүлнэ. Бүх вэб сервэрүүд нэг өгөгдлийн сервэррүү холбогдсон байх ёстой. Үгүй бол хэрэглэгч буруу мэдээлэл авах эрсдэлтэй.

Layer 7 Load Balancing

Өөр нэг сүлжээний ачааллын урсгалыг тэнцвэржүүлэх төвөгтэй арга бол layer 7(application layer) арга юм. Layer 7 арга нь ачаалал тэнцвэржүүлэгч дээр ирсэн хүсэлтүүдийг доторх өгөгдлөөс нь хамаарч өөр өөр backend сервэррүү дамжуулдаг. Энэ төрлийн арга нь танд нэг домайн порт доор олон вэб аппликэйшн сэрвэрүүд дээр ажиллах боломжийг олгодог.
Layer 7 Load Balancing
Дараах жишээ нь хэрвээ хэрэглэгч yourdomain.com/blog хүсэлтийг илгээхэд тэд үүнийг blog backend(blog application дээр ажилладаг сервэрүүдийн багцруу) -рүү дамжуулна. Бусад хүсэлтүүд web-backend(өөр аpplication сервэр)-рүү. Энэ жишээнд бүх backend-үүд ижил өгөгдлийн сангийн сервэр ашиглаж байгаа
frontend http
  bind *:80
  mode http

  acl url_blog path_beg /blog
  use_backend blog-backend if url_blog

  default_backend web-backend
Load Balancing Algorithms
Ачаалал тэнцвэржүүлэх алгоритм нь ачаалал тэнцвэржүүлэлтийн үед аль backend дэх аль сэрвэрийг ашиглах вэ гэдгийг тодорхойлдог. HAProxy нь хэд хэдэн алгоритмын сонголтуудыг санал болгодог.
Их ашиглагддаг цөөн хэдэн алгоритмууд:

roundrobin

Round Robin нь сервэрүүдийг тойргоор сонгодог. Энэ нь default алгоритм.

leastconn

Бага холболт үүссэн сервэрийг сонгодог--энэ нь илүү удаан хугацаанд ашигладаг session-үүдэдтэй үед санал болгодог. 

source

Энэ нь жишээ нь таны хэрэглэгчийн IP хаягнаас шалтгаалж сэрвэрээ сонгодог. Энэ бол хэрэглэгч нэг ижил сервэртэй холбогдох нэг арга юм.
Sticky Sessions
Зарим application-үүд хэрэглэгч нэг сервэртэйгээ үргэлжлүүлэн холбогдох шаардлагатай байдаг. Үүнийг backend-д байх appsession  параметр ашиглаж sticky sessions-ээр хэрэгжүүлдэг.
Ашигласан URL: