Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Шаблон "Service Discovery" в методологии DevOps

1,335 views

Published on

Доклад Алексея Алексеева на конференции SQA Days-18, 27-28 ноября 2015 г., Москва
www.sqadays.com

Published in: Education
  • Be the first to comment

Шаблон "Service Discovery" в методологии DevOps

  1. 1. Шаблон “Service Discovery” в методологии DevOps Алексей Алексеев
  2. 2. Кратко о DevOps
  3. 3. Паттерны в DevOps Technical People Process Continious Integration Continious Deployment Continiuos Testing Automated Testing etc…. Job Rotation Full Stack Engineers Integrated Teams Join Meetings etc…. Infrastructure as Code Service Discovery Monitoring Developer Self Service etc….
  4. 4. Service Discovery - В понимании DevOps это общий инфраструктурный паттерн - направлен на обеспечении целостности связей между приложениями и сервисами - создает единую точку доступа к сервисам
  5. 5. Несколько слов об окружениях DEV STAGE DB DB Application Application DB
  6. 6. И как нам это внедрить? 1. Что нужно для вредрения? 2. Куда бежать? 3. Что читать? 4. Если это у нас будет - у нас будет DevOps? 5. Нам нужно все переделывать под этот паттерн?
  7. 7. Инструментарий
  8. 8. Краткое сравнение DNS Api REST Api Плюсы Минусы Нет Да SSL, кластеризация Частая смена api Да Да Кластеризация Отсутствие хранилища, ограничение на размер ответа Doozer Нет Нет Кластеризация Отсутствие поддержки проекта, свой протокол. ZooKeeper Нет Нет Устоявщийся проект, большое комьюнити Java, необходимость встраивать клиента в приложение.
  9. 9. Service Discovery для QA - Управление инфраструктурой - Генерация тестовых данных - Генерация конфигураций - Автоматическая настройка CI
  10. 10. Генерация тестовых данных ТестыService Discovery Запрос данных/шаблона Ответ с готовыми данными Тестовые данные
  11. 11. Генерация тестовых данных class TestEtcdData(unittest.TestCase): def setUp(self): self.testUser=requests.get('http://localhost:2379/v2/keys/test-user') def test_get_data(self): self.assertEqual(self.testUser.json()['node']['value'], 'Ivan') if __name__ == '__main__': unittest.main()
  12. 12. Генерация конфигураций ТестыService Discovery Запрос данных/шаблона Ответ с готовыми данными Хост Сервис Сервис
  13. 13. Генерация конфигураций import socket serversocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM) serversocket.bind(('', 0)) port=serversocket.getsockname()[1] print "Fake server running on port %s"%port serversocket.listen(5) while 1: (clientsocket, address) = serversocket.accept()
  14. 14. Генерация конфигураций OS Сервис Serf Handler Handler
  15. 15. Генерация конфигураций import sys import subprocess serf_payload="" for line in sys.stdin: serf_payload+=line def exec(command): return subprocess.Popen(command,shell=True, stdout=subprocess.PIPE).stdout.read() pid=exec("ps aux | grep '%s' | grep -v 'grep' | tr -s ' ' | cut -d' ' -f2 "%serf_payload.rstrip()) port=exec("lsof -w -a -p%s -i4 | grep LISTEN | tr -s ' ' |cut -d' ' -f9 "%pid.rstrip()) print port.split(":")[1]
  16. 16. Применение для CI Service Discovery
  17. 17. Применение для CI https://jenkins-sqadays18.rhcloud.com/ username: sqadays18 password: sqadays18
  18. 18. Плюсы 1. Избавились от десяти мест для хранения конфигураций 2. Создали единый справочник по сервисам доступным в окружении 3. Получили гибкое распределенное хранилище
  19. 19. Минусы 1. Сервис для поиска сервисов теперь полностью на нас 2. Как теперь найти этот сервис? 3. Нет единственного подходящего решения
  20. 20. Контакты http://linkedin.com/in/alexeyalexeev voodoo1441 https://google.com/+АлексейАлексеев144

×