Мы делили апельсин

Preview:

DESCRIPTION

Александр Шостак, технический директор eComCharge «Мы делили апельсин» Александр расскажет о системе процессинга электронных платежей. В докладе будут рассмотрены проблемы, с которыми столкнулась команда, а именно: - как одно большое приложение было разделено на несколько - какие сервисы были реализованы - какие задачи были закрыты с помощь готовых решений - как внедрить нескольких сущностей (клиентов системы) - как реализовать безотказную работу особо важных частей системы. Также будет затронут вопрос мониторинга и разворачивания систем.

Citation preview

Мы делили апельсин

Александр Шостакalexander@ecomcharge.com

Платежный шлюз

Покупатель Продавец Банк-эквайер

Процессоплаты картой

Платежный шлюз beGateway

Комбайн

Много функционалаМного тестовДолгий деплой

Два приложения

delayed_job

База данных

solr

redis

MySQL

PostgreSQL

MySQL PostgreSQL

Order.!rst Order.!rst≠

Failover• nginx/haproxy/...• keepalived• amazon elastic load balancer

nginx

сервер приложения 1

сервер приложения 2

nginx

входящий запрос

keepalived

сервер приложения 1IP 192.168.1.2

сервер приложения 2IP 192.168.1.3

сервис IP 192.168.1.1 сервис IP 192.168.1.1

входящий запрос к 192.168.1.1

amazon elastic load balancer

сервер приложения 1

сервер приложения 2

ELB

входящий запрос

Caphub

Caphub

cap project:location:environment deploy

Caphub

• в project.rb

• в environment.rb

• результат

role :app, "10.0.0.10", :primary => true

role :app, "10.0.0.20", :primary => true

role :app, "10.0.0.20", :primary => true

Caphub

Сервера

Chef

Chef

package "apache2" do action :install end

Chef

package "apache2" do

  case node[:platform]  when "centos"   package_name "httpd"  when "debian","ubuntu"    package_name "apache2"   else    package_name "apache"  end

  action :install end

Chef

knife ec2 server create \ -N app \ -d ubuntu12.04-apt \ -r role[app] \ -f t1.micro \ --private-ip-address 10.0.0.22 \ --server-url http://10.0.2.254:4000

Chef

recipe[rvm::default_193] recipe[logrotate::wls] recipe[mysql::libmysqlclient] recipe[nginx::backend]

role[app]

Мониторинг

Zabbix

Monit

PID changed Service delayed_job-production

" Date:        Wed, 04 Sep 2013 13:58:45" Action:      alert" Host:        delay" Description: process PID changed from 20715 to 7623

Your faithful employee, Monit

OSSEC

OSSEC HIDS Notification.2013 Sep 05 10:52:14

Received From: (log) 10.0.0.200->/var/log/syslogRule: 1002 fired (level 2) -> "Unknown problem somewhere in the system."Portion of the log(s):

Sep 05 10:52:13 10.0.0.108 +0000: [Worker(delayed_job host:delay pid:7623)] 2 jobs processed at 9.4945 j/s, 1 failed

Выводы

Вопросы?

Recommended