Резюме
Я не думал, что недавняя миссия действительно была решена за неделю, а я был занят в субботу, не доделал, не доделал. Фрэнк, у меня давно не было такого опыта, и я несколько дней возился с технической проблемой, поэтому это так увлекло, но лучше решить. Хоть эта задача может и не встретить особо похожей, но все же хочу поделиться со всеми решением проблемы, кстати, как решить технические проблемы.
Вопрос фон
Проект Python с открытым исходным кодом необходимо интегрировать в систему микросервисов компании (в основном java). Проекты с открытым исходным кодом совместно именуются ниже какopa
.opa
Нижний уровень проекта зависит от некоторых библиотек C++, таких какopenImageIO.
анализ проблемы
Когда я получил это задание, я был на самом деле довольно взволнован, и времени было относительно мало, и на его выполнение ушло около недели. Есть еще некоторые проблемы в оценке этой задачи в свете ее собственных обстоятельств. в основном в
- Я не писал несколько лет код на питоне, с++ и незнакомом.
- Отсутствие опыта создания сложных образов докеров
- Нет опыта подключения языка python к микросервисной системе
- Борьба в одиночку, не с кем посоветоваться
Прежде всего, я немного разобрал это задание, и оценил сложность, из 5 звезд.
- Чтобы создать среду разработки Python, вам нужно запустить локальный
opa
проектировать, разрабатывать, отлаживать. *** - будет
opa
Проект трансформируется в веб-проект с спокойным интерфейсом. ** - Зарегистрируйте услугу в сервисном центре *
- Предоставить Java-клиент для внешних вызовов *
- Создайте образ докера и разверните сервис на k8s. ***
Неожиданно эта задача столкнулась с таким количеством проблем в процессе решения
процесс решения
будетopa
Трансформация проекта в веб-проект
В начале этого задания индекс сложности был 3 звезды.На самом деле оказалось, что хотя оно и сложное, но его можно выполнить с помощью поисковой системы.Комплексный индекс был 2 звезды.На самом деле потребовалось 1d.
IDE: pycharm
环境: py2/py3
包构建: pip
Основные проблемы, с которыми приходится сталкиваться,
проблемы с python2, python3Среда разработки установлена с py3,opa
Проект представляет собой проект py2, поэтому я преобразовал его с помощью инструментапитон в питон3
Я должен жаловаться, что Python3 не совместим с синтаксисом Python2, например, Print. Но синтаксис Python3 может работать в Python2, что немного сложно Тем не менее, 2-> 3 - большая версия. Это может быть сделано без нарушения или стояния, а старые вещи не отбрасываются, что увеличивает затраты на обслуживание.
проблема с версией пакета
Для меня, пишущего на java, управление пакетами в python — это просто нонсенс, и не будет преувеличением назвать это шоком. слот
- файлы без зависимостей проекта
- Пакету не нужно указывать версию
Но поскольку большая часть проекта представлена пакетом, я не слишком запутался в этом вопросе, установленном на одном отдельном вверху. Если требуется поддерживать восемь дочерних элементов проекта, у Python теперь есть потребность в месте проведенияинструмент управления пакетами
будетopa
Трансформация проекта в веб-проект
Эта задача выполняется быстрее, чем ожидалось, с использованиемflask
пакет, сучебник по колбеНа самом деле это занимает день, чтобы сделать это
Зарегистрируйте услугу в сервисном центре и предоставьте java-клиент для внешних вызовов.
Этот контент не является большой проблемой, это чисто ручная работа, и в один день легко решить.
собрать образ докера, развернуть сервис на k8s
Этот шаг вначале оценивался в 3 звезды, но я не ожидал, что он меня сильно замучает, и на его решение ушло два рабочих дня. Решите это к выходным. Возникли более 10 проблем, я записал некоторые с некоторыми примечаниями
1.pip install
Когда я обнаружил, что не существует версии определенного пакета, версия была обновлена, и тогда потребовался python3.На самом деле среда была python2Объявляем move.com/questions/5…
Окончательно решено, указав версию
pip install -i https://mirrors.aliyun.com/pypi/simple numpy==1.16.4
2. Проблемы с сетью
这个问题折磨的我痛不欲生,欲哭无泪。因为需要验证构建是否正确,要反复的build image,每次install 各种package, pip install
python包,需要半小时才完成的了。在家连vpn,网络更加慢,时间更长,这让我无数次拷问自己,都2019年了,我居然还在被网络带宽困扰,人活着的意义到底是为了什么,我为什么要把我美好的人生浪费在这里。
这个问题主要通过3方面解决
- docker multi stage build
构建多个docker base镜像,然后from base镜像,这样可以减少image的构建时间
- 更改下载软件的地址源
比如apt,yum的,pip 的。
- 将另外一些需要wget的包下载下来,扔到内网,访问内网地址
3. Сборка образа Docker из FROM Необходимо построить базовый образ на основе внутреннего базового образа Java компании и проекта Python. Сначала я думаю, конечно
FROM opa.image
FROM company.image
На самом деле докер может только унаследовать только от одной базы, первый из будет игнорироваться. Таким образом, вам нужно использовать многоступенчатую сборку для копирования содержимого предыдущего слоя на новый слой Для получения подробной информации см.multi-stage build
4. Проблема с динамической библиотекой C++
opa
При копировании содержимого изображения сообщается об ошибке при выполнении bin/. Библиотека С++ отсутствует. Библиотеку C++ нужно сделать в ядре, и копировать файл напрямую бесполезно.
5. убунту, проблема с центосом Все зеркала компании основаны на системе centos, с открытым исходным кодом на базе ubuntu, а синтаксис несколько несовместим.
окончательное решение
Самая большая проблема, которая беспокоит меня, — это проблема построения образа докера, как построить контейнер докера, который поддерживает c++, python и java, на основе двух базовых образов. Решение последней проблемы пришло от вспышки вдохновения, когда я проснулся. Среда, требуемая проектом, примерно следующая
В прошлом я боролся с различными проблемами
- ubuntu,centos
- Различные ошибки установки пакетов
- проблема с версией пакета
- установить библиотеку c++
- проблема с загрузкой по сети
Столько проблем переплелось и ум не ясен. Самая большая проблема, которая беспокоит меня, — это проблема построения образа докера, как построить контейнер докера, который поддерживает c++, python и java, на основе двух базовых образов. Решение последней проблемы пришло от вспышки вдохновения, когда я проснулся.
Потому что для меня главная трудность заключается в построении докера образа оригинального проекта, а изображение в компании и вновь добавленном коде на этот раз в основном в основном среда выполнения Java. Запуск банки и установки PIP несколько пакетов Python относительно просты.
Таким образом, изменение мышления больше не основано на образе среды Centos компании, а наopa
Изображение, так что вы не можете переместить исходное изображение. Эквивалент тех вещей, с которыми я не знаком, все заблокировано.
Создайте базовый образ
FROM company.image AS builder
// 将环境基于原来的image
FROM base.image
// copy java环境到image
COPY --from=builder /usr/lib/jvm/jdk1.8.0_172 /usr/lib/jvm/jdk1.8.0_172
Затем создайте среду Python на основе базового образа. Наконец проблема решена.
Суммировать
В процессе решения этой задачи я резюмирую некоторые основные принципы, которые могут помочь вам решить проблему
-
Знай свой технический уровень и поймай ритм
В начале решения задачи, хорошей и трудно поддающейся оценке, и постоянно сравниваемой с расчетным временем процесса решения, превышением ожиданий, необходимостью своевременной корректировки, Твердо поймайте ритм живой задачи, убедитесь, что все под контролем.
-
Установите приоритет проблемы Классифицируйте проблемы и определите, какие из них должны быть решены, а какие можно игнорировать.
Вы можете столкнуться со многими проблемами, и эти проблемы приведут ко многим проблемам, если вы вникнете в них.Такой глубокий обход приведет к задержкам выполнения задач и глубокому разочарованию. Решайте только те проблемы, которые должны быть решены, а не те, которые необходимы, но которые вас интересуют, записывайте их и исследуйте позже.
-
разделяй и властвуй Задачу, которую вы решили, возможно, еще никто не делал, а ответ в Интернете найти не удалось. Необходимо разбивать задачи, абстрагировать и упрощать сложные проблемы со многими предпосылками и консультироваться с людьми, имеющими соответствующий опыт, что может сделать общение более эффективным и ускорить решение проблем.
Обратите внимание на публичный аккаунт [Abbot's Temple], как можно скорее получите обновление статьи и начните путь технической практики вместе с аббатом
Ссылаться на
Объявляем move.com/questions/5…