Як ви обробляєте версії в багатосторонньому проекті?


14

Я знаю, що це питання широке, тому я постараюся бути максимально конкретним. Це питання є скоріше "організаційним" питанням, ніж технічним.

У нас є багатосторонній проект з такими основними компонентами:

  • Сервер, що розміщує основну логіку бізнесу (моделі даних)
  • Проблема для клієнтів, яка використовує основну логіку бізнесу
  • API програми (REST), який також використовує основну логіку бізнесу
  • Існують додатки для смартфонів (iOS та android) за допомогою API програми
  • Є інший додаток для планшетів (Android), відмінний від смартфона, використовуючи той самий API програми.

Незабаром я буду на виробництві з активними клієнтами. І як і будь-який проект, мені потрібно буде підтримувати всі різні компоненти протягом часу. Це означає, що все наступне можна оновити:

  • код основної бізнес-логіки на сервері (використовується бек-офісом, API і, як побічний ефект, мобільними додатками)
  • сам API (використовується як для смартфонів, так і для планшетів)
  • усі мобільні додатки (через appstore / googleplay)

Звичайно, частини сервера (основний логічний код бізнесу та код API) я можу негайно змінити сам. Однак нові додатки для мобільних пристроїв повинні завантажуватись клієнтами в appstore / googleplay, і я не можу бути впевнений, що вони актуальні.

Чи можете ви надати якісь вказівки, поради щодо передового досвіду, щоб зробити оновлення тез плавним та без ризику для клієнта?

Який компонент мені потрібен для "версії"? Як переконатися, що все працює, навіть якщо клієнт не оновить свій мобільний додаток? Чи варто змусити його модернізувати, щоб полегшити роботу?

Словом, як я повинен організувати, щоб мій багатосторонній проект жив з часом?


2
Ваша проблема відрізняється від версії api ?
k3b

Так, більшість із цих тем, мабуть, стосуються версії API для публічних API. Мій API - це "application / private" API, він використовується лише для роботи моїх мобільних додатків. Плюс, моє запитання ширше, оскільки стосується не конкретного компонента, а всього проекту :)
Девід Д.

Відповіді:


9

Оскільки ви не можете контролювати, коли мобільні додатки будуть оновлені до нової версії, вам потрібно ввести принаймні свій REST API. Якщо ви цього не зробите, неможливо зробити зміни, сумісні з зворотним зв'язком.

Окрім API REST, корисною є також версія інших комунікаційних інтерфейсів, що переходять через мережевий інтерфейс. Таким чином, ви також не змушені оновлювати всіх клієнтів backoffice одночасно з серверами, і ви можете здійснити поступове перенесення на нову версію з періодом "бета-тестування".

Окрім модифікації комунікаційних інтерфейсів, вам слід також спробувати зробити зміни назад максимально сумісними. В ідеалі ви можете розгорнути нову версію інтерфейсу, яка все ще повністю підтримує старі клієнти, щоб вони не помітили, що щось змінилося.


Дякую за це Щоб точно зрозуміти, чи можете ви навести приклад того, що може бути "іншим комунікаційним інтерфейсом"?
Девід Д.

@DavidW: Прикладом іншого комунікаційного інтерфейсу може бути інтерфейс між клієнтом backoffice та сервером основного бізнесу. Або між службою API та базовим службою бізнесу.
Барт ван Інген Шенау

4

Ця публікація цікаво розповідає про ваше запитання.

Більш практичний спосіб, якщо у вас є 3 компоненти:

  • 2 Споживачі: передній і мобільний додаток
  • 1 постачальник API: Back-End

Ви можете використовувати типову схему версій Mmp (Major.minor.patch) для кожної, але у своєму Back-End URL-адресі ви можете поставити щось як http://youhost/M.m/resourceURI.

По мірі розвитку та зміни API не впливають на ваш договір зі споживачами, ви зберігаєте M.mяк є в URL-адресі. З того моменту , коли ви вносите зміни в бекенд , що впливає на ваші споживачів (будь то зміна поведінки або об'єкта , який відрізняється) ви використовуєте M.m+1, M+1.m+1або M+1.m.

Спосіб продовжувати роботу - це розгортання нового Back-End одночасно зі старим, а ваші користувачі встановлюють нових споживачів і повільно припиняють використання старого API.

Ви можете побачити спосіб кращої відповіді, ніж мій, тут: Версія REST API на Stackoverflow


Я думаю, що в моєму проекті неможливо мати більше однієї основної логіки бізнесу (інакше мені знадобиться кілька баз даних). Але я можу впевнитись, що всі API REST все ще залишаються сумісними з цією логікою базового бізнесу. Не забувайте, що мої API не є загальнодоступними API, і споживачі не повинні використовувати URI безпосередньо. Мої клієнтські програми це роблять. Хороший бал для позначення М / м + 1 спасибі.
Девід Д.

1
Добре, якщо у вас є якийсь баланс проксі / завантаження, який приховує URL-адресу API, ви можете просто додати спеціальний заголовок HTTP і налаштувати балансир завантаження, щоб вказати на кожну реалізацію таким чином, кожен споживач повинен буде надіслати повідомлення HTTP на ту саму URL-адресу, але із зазначенням очікуваної версії API у заголовку.
мімсугара

2

Я рекомендую вам встановити сервер безперервної інтеграції, підключити його до вашого сховища коду та сховища знімків / релізів та автоматизувати ваші збірки. Це матиме ряд переваг:

  1. Кожен компонент буде розроблений під час його виходу. Сюди входять бібліотеки низького рівня, а також ваші кінцеві продукти.
  2. Кожна фіксація коду викликає збір знімків. Це допомагає зберегти розробників чесним, особливо якщо ви користуєтеся засобом, щоб надіслати електронний лист винуватцю, який зламав збірку.
  3. Кожна збірка може запускати одиничні тести. Це помітно покращує якість коду.
  4. Кожен випуск буде позначений тегами, тому, якщо потрібно виправити виробництво, легко відключитися від тегу і зробити виправлення.
  5. Вам потрібно буде вести якийсь регістр сумісності. (наприклад, BackOffice 1.0.23 сумісний з REST API 2.0.267 тощо). Я не знаю інструменту, який допоможе в цій галузі.

Мій досвід роботи з інструментами з відкритим кодом: SVN, Maven 2, Jenkins і Nexus, але всім цим є альтернативи.

Не варто недооцінювати час навчання, щоб швидше розвивати свою команду. Але як тільки вони дойдуть до швидкості, вони ніколи не повернуться назад.


Цікавий момент дякую. Чи може створити автоматичний знімок, якщо мій проект поширюється на 3 git repos (1 для бекенда, 1 для планшетного додатка, 1 для додатка для смартфонів)?
Девід Д.

@David W. Jenkins, безумовно, підтримує це, оскільки у кожного завдання є своя URL-адреса сховища коду.
ківірон

2

Для відносно невеликої команди з розробки та розгортання модель сумісності клієнта N-1, яка використовується IBM Jazz, може працювати досить добре

Намагайтеся підтримувати клієнтів і серверів на одному номері версії. [Замість управління матрицею незалежних версій та їх сумісності]

Складіть політику, згідно з якою клієнтська версія Xyy повинна працювати з усіма версіями серверів вище Xyy, але нижче, ніж X + 2.0.0

Для версії сервера 4.0 в ідеалі повинна бути версія клієнта 4.0 для кожного типу клієнта. Однак сумісність повинна підтримуватися так, щоб дозволити дещо різні версії клієнтів та серверів.

Клієнтська версія 4.x повинна бути сумісною з серверами версії 4.x і вище, але нижче 6.0; Сервер 4.x повинен бути сумісним з усіма клієнтами версії 3.0 і вище, але менше або рівний 4.x

Таким чином ви можете оновити версію на сервері, не турбуючись про негайний випуск нових версій клієнтів, але будете мати лише чітко визначене вікно сумісності для підтримки.

Посилання: IBM Jazz Model [ https://www.ibm.com/support/knowledgecenter/en/SSYMRC_6.0.0/com.ibm.jazz.install.doc/topics/c_n-1.html]


1

По-перше, я дозволяю почати, трохи по-іншому поставивши проблему. Ви запитали, які фрагменти програмного забезпечення вам потрібні для "версії". Версія - це перевантажений термін у CS, який може означати близько 100 різних речей. Основні речі, на які я б звернувся, це:

  1. Контроль версій - Контроль версій - це інструмент управління конфігурацією, який допомагає вам відслідковувати знімки та історію розвитку. ВСІ КОДИ БУТЬ ПІД ВЕРСІЙНИМ КОНТРОЛЮ. Мені байдуже, чи це просто сценарії зручності, які ви додаєте у свою папку бін, все, на що варто витратити час, варто дві секунди, щоб додати до програмного забезпечення для редагування ревізії.
  2. Управління конфігурацією - як контролювати те, що знаходиться в збірці. Все програмне забезпечення повинно мати певний ступінь управління конфігурацією. Мені подобається описувати менеджерам різницю між контролем версій та керуванням конфігурацією, оскільки управління версіями - це лише інструмент для відстеження історії розвитку, тоді як управління конфігурацією - це вказівки щодо того, як ми створюємо історію, і як ми робимо такі речі, як вирішити код це добре.
  3. Версія програмного забезпечення - присвоєння імен релізам коду. Це те, на що багато людей зациклюються, коли вперше бачать проблему, тому що вони звикли бачити "MineSweeper 7.1.29290149210" або будь-що інше, що вони купують, але, чесно кажучи, я вважаю це найменшою частиною набагато більшої проблеми. Якщо чесно, просто використовувати хеш, згенерований 1, і не подбати про все так багато, що його не читабельна людина - це чудово.

Тож оскільки це для мене найбільш туманно і найцікавіше, я просто збираюся зосередитись на №2. У керуванні конфігурацією не існує рішення, що відповідає всім розмірам файлів cookie. Правила, які добре працюють для команди з 2 або 3, можуть бути занадто розкутими для збереження розуму в проекті, який займає сотні працівників. Правила, які працюють у великій команді, можуть вимагати занадто великі накладні витрати для малої команди. Вам, швидше за все, доведеться обмацати щось своє, щоб зібрати щось разом, але я використовую такий список як спосіб розробити специфікації для вашої системи управління конфігурацією:

  1. Як я можу відслідковувати версії (та пов'язані з ними проблеми), які я підтримую на ринку?
  2. Як я вирішу, які шляхи розвитку готові до випуску у виробничі системи? (Він також може бути готовий до будь-якого іншого кроку в процесі)
  3. Хто повинен мати контроль / керувати конфігурацією системи? Який робочий процес для додавання коду для розповсюдження іншим розробникам?
  4. Як я можу контролювати взаємодію між взаємодіючими частинами? Як я дізнаюся, якщо зміна частини порушить решту системи?
  5. Як з часом ми вдосконалимо нашу систему управління конфігурацією.

Вам потрібна допомога у відповіді на вищезазначені питання? Напевно, ви повинні найняти консультанта або менеджера з програмного забезпечення ... відповісти, що може заповнити підручники і є вихід із сфери для цього форуму.


Дуже цікава відповідь, дякую за це. На питання №1 можна легко відповісти в "однокомпонентному" проекті і, здається, є дуже складним у багатокомпонентному проекті.
Девід Д.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.