Обзор серверных технологий Java

Java задняя часть Архитектура сервер

Какими навыками должен овладеть квалифицированный бэкэнд-инженер Java? Отсканируйте QR-код ниже, чтобы увидетьОбзор серверной технологии Java.

Основные принципы разработки программного обеспечения

Вот некоторые из основных принципов, которым должна следовать разработка программного обеспечения:

  • Не повторяйтесь: это фундаментальный принцип разработки программного обеспечения, который заключается в том, чтобы не выполнять повторяющуюся работу. Это также тип того, что сейчас называют «компьютерной культурой». Дублирование кода и дублирование работы неразумны в разработке программного обеспечения. Устранение этих дубликатов различными способами является основным принципом разработки программного обеспечения.
  • Будьте проще, глупее: принцип KISS. В работе по разработке программного обеспечения много раз не думайте слишком сложно, не перепроектируйте и не оптимизируйте преждевременно.Использование самого простого и эффективного решения позволит избежать всевозможных дополнительных затрат, связанных со сложными решениями. Это способствует не только последующему обслуживанию, но и дальнейшему расширению.
  • Вам это не понадобится: принцип YAGNI. Просто включите функции, необходимые для вашего приложения, и не пытайтесь добавить какие-либо другие функции, которые, по вашему мнению, могут вам понадобиться. Потому что в софте часто 80% запросов тратится на 20% функций.
  • Сделано лучше, чем идеально: Когда вы сталкиваетесь с задачей разработки, лучше всего сначала сделать что-то, а затем итеративно оптимизировать. Если учесть все детали с самого начала, легко попасть в ступор и затянуть ход проекта.
  • Выбирайте самое подходящее: это очень важный принцип при выборе программ и технологий. Перед лицом множества технических решений и реализаций с открытым исходным кодом мы не должны слепо искать инновации, а выбирать наиболее подходящее вместо того, чтобы хвастаться.

программный процесс

В жизненном цикле программного обеспечения, помимо разработки, есть много других шагов, а также некоторые технологии, которые необходимо освоить.

  • Управление проектами: управление проектами очень важно для разработки программного обеспечения, которое может гарантировать, что ход проекта осуществляется упорядоченно и выполняется с определенным качеством в течение контролируемого времени. Водопадная модель развития и спиральная модель развития являются традиционными моделями управления проектами. В работе по развитию Интернета гибкая разработка является более уважаемым методом разработки. Так называемая agile-разработка — это быстрая реализация прототипов, а затем быстрая итерация. Scrum — один из самых популярных методов гибкой разработки.
  • Test Driven Development: В обычном процессе разработки популярным и эффективным способом является Test Driven Develop, то есть Test Driven Development. Суть этого подхода заключается в написании модульных тестов. Проще говоря, это сначала выполнить модульный тестовый пример определенной функции, а затем завершить разработку функции в процессе постепенного устранения ошибки компиляции тестового примера.
  • Непрерывная интеграция: после разработки определенной функции программного обеспечения следуют последующие процессы, такие как тестирование, предварительный выпуск и развертывание. Весь процесс называется интеграцией, а непрерывная интеграция относится к процессу, который может выполняться непрерывно без вмешательства человека. Jenkins и Quick Build — типичные инструменты непрерывной интеграции.

ежедневное развитие

Ежедневное развитие относится к некоторым навыкам, инструментам и т. д., которые необходимо осваивать ежедневно.

  • Редактор: Редакторы, которые в настоящее время используются в разработке, включают Emacs, Vim и SublimeText. Я чаще всего использую SublimeText, который в основном может удовлетворить мои потребности в разработке, включая написание кода сценария, просмотр файлов кода и т. д. По сравнению с SublimeText, двум редакторам Vim и Emacs нужно запомнить множество команд, и есть определенные пороги для начала работы.
  • Управление версиями исходного кода: инструменты управления версиями кода изменились с CVS на SVN и Git, и фактически сформировалась схема управления версиями, основанная на распределенном управлении версиями. Git Flow, основанный на Git, можно использовать в качестве модели управления исходным кодом.
  • Инструменты проекта: Github — это сторонний центральный репозиторий Git, в настоящее время крупнейший в мире репозиторий с открытым исходным кодом, который также может использоваться в качестве частного программного обеспечения для управления кодом; Phabrictor с открытым исходным кодом от Facebook обеспечивает очень мощное управление задачами, устранением ошибок, тестированием и управление кодом и т. д., но порог для начала относительно высок; Zendao — инструмент управления проектами, разработанный китайцами, но его бесплатная версия имеет ограниченные функции; сторонние службы управления проектами, представленные Tower.im, также являются дополнительным решением , и риск заключается в том, что данные больше не являются частными.

Рабочая среда

После завершения разработки внутреннего приложения его необходимо развернуть на сервере для предоставления внешних услуг. От первоначального развертывания сервисов непосредственно на физических машинах до более поздних виртуальных сред, облачных сред, а теперь и горячих контейнеров, до недавнего появления бессерверных технологий. Все это делается для того, чтобы упростить создание, обслуживание и расширение операционной среды службы.

  • Linux: когда дело доходит до внутренних серверов, вы не можете обойти Linux. По крайней мере, сейчас подавляющее большинство серверных сервисов Интернета развернуто в различных серверных версиях Linux. Среди них CentOS, Ubuntu и Debian являются наиболее часто используемыми версиями. Для Linux вам необходимо освоить многие распространенные команды оболочки, такие как ps, netstat, lsof, ss, df, dh и так далее. Кроме того, необходимо умело использовать многие команды анализа производительности, такие как top, vmstat, iostat, sar и т. д.
  • Сервер приложений. Что касается Java, веб-приложения часто разрабатываются для предоставления внешних служб через протокол HTTP. В дополнение к более высоким требованиям к производительности служба HTTP будет построена сама по себе, и в большинстве случаев необходимо полагаться на сервер приложений, поддерживающий программы Java. В настоящее время наиболее часто используются: Tomcat, Jetty. Строго говоря, это всего лишь контейнеры сервлетов, а настоящие серверы приложений JavaEE, такие как Jboss и Weblogic, редко используются в Интернете. Конечно, это программное обеспечение не обеспечивает такие функции веб-сервера, как перезапись URL-адресов и делегирование запросов, и их недостаточно для того, чтобы играть роль полноценного веб-сервера. Nginx в настоящее время является самым популярным веб-сервером.
  • Балансировка нагрузки: в среде с большим одновременным трафиком серверная служба будет предоставлять внешние службы в режиме кластера. В передней части кластера требуется балансировщик нагрузки для распределения запросов на каждый узел кластера. LVS — самое популярное программное обеспечение для четырехуровневой балансировки нагрузки, HAProxy — еще одно программное обеспечение, которое поддерживает как четырехуровневую, так и семиуровневую балансировку нагрузки, а Nginx — самое популярное решение для семиуровневой балансировки нагрузки. Конечно, лучшим решением для балансировки нагрузки по производительности является аппаратная балансировка нагрузки, представленная F5, но она редко используется в интернет-командах из-за ее высокой стоимости. Кроме того, здесь необходимо добавить обеспечение высокой доступности сервисов одной роли.Например, LVS часто используется в качестве точки входа трафика.Поэтому будет развернуто несколько узлов LVS, которые будут активными и резервными для друг друга, чтобы предотвратить недоступность служб в случае сбоя одной из них. В настоящее время наиболее часто используемой технологией Keepalived является технология взаимного мастер- и резервного копирования.
  • Виртуализация. Технология виртуализации — это технология, которая в последние несколько лет часто использовалась для частных облаков. То есть он разделяет свой физический хост на несколько виртуальных хостов с помощью технологии виртуализации, которая может изолировать ресурсы. Среди них репрезентативные технологии VPS (Virtual Private Server) включают в себя: Virtual Server от Microsoft, ESX Server от VMware и Virtuozzo от SWsoft. Кроме того, функция создания частной IIAS, предоставляемая OpenStack, создание операционной среды частной платформы, предоставляемая Cloud Foundry, и служба контейнеров, предоставляемая Docker, — все это технологии виртуализации.

Услуги третьих лиц

Хотя в принципе все программные сервисы могут быть разработаны или развернуты на собственных серверах. Однако из-за ограничений по стоимости, циклу или другим объективным факторам многие услуги по-прежнему требуют использования третьих сторон.

  • IAAS: инфраструктура как услуга — это первая модель облачных вычислений, и теперь практически все поставщики облачных услуг имеют услуги IAAS. Среди них самый мощный в мире поставщик облачных услуг — Amazon AWS, а отечественный — Alibaba Cloud. С текущей точки зрения, даже если он так же силен, как AWS, будут некоторые сбои в работе и обслуживании, поэтому надежность услуг, а также реакция на эксплуатацию и обслуживание этих отечественных поставщиков облачных вычислений часто подвергаются критике. Из моего собственного опыта. Примерно в 2010 году облачные сервисы Shanda Cloud действительно хорошо справлялись со своей задачей, но затем по разным причинам практически потеряли свою долю. Помимо Alibaba Cloud в Китае, относительно надежной компанией, специализирующейся на облачных вычислениях, является UCloud. Кроме того, есть также Qingyun, который немного выше и является хорошим выбором. Конечно, эти поставщики облачных услуг являются не только IAAS, но и предоставляют многие услуги PAAS.
  • PAAS: Платформа как услуга, то есть только код должен быть отправлен в указанную операционную среду, а другие, такие как упаковка кода, развертывание и привязка IP, выполняются платформой. Помимо использования Cloud Foundry для создания собственной платформы PAAS, наиболее популярными сторонними службами PAAS являются SAE от Sina, BAE от Baidu и GAE от Google.
  • Доменное имя: после того, как есть приложение, которое может предоставлять услуги, доменное имя также является необходимой инфраструктурой. Хорошее доменное имя не только представляет имидж компании, но и способствует запоминанию и распространению среди пользователей. В настоящее время вы можете приобрести доменные имена через иностранные name.com, godaddy и отечественные Wanwang. После того, как у вас есть доменное имя, следующим шагом будет его запись.Поставщик доменного имени обычно предоставляет вспомогательные услуги или находит некоторых агентов. Кроме того, для разрешения доменных имен поставщики доменных имен обычно имеют встроенные функции разрешения или могут использовать независимые службы DNS, такие как dnspod.
  • CDN: сеть доставки контента, которая является технической реализацией близлежащих запросов. Поставщик услуг будет кэшировать контент, к которому будут обращаться в больших количествах на нескольких узлах по всей стране, чтобы при доступе пользователь мог выбрать ближайшее местоположение, тем самым уменьшая задержку передачи по сети и повышая скорость доступа. В настоящее время Qiniu и Youpai предоставляют хорошие услуги CDN в Китае.Конечно, поставщики интегрированных облачных услуг, такие как Alibaba Cloud и UCloud, также имеют услуги CDN.
  • Отправка почты: это в основном зависит от почтового сервера, а затем может быть отправлено по протоколу SMTP. Вы можете создать его самостоятельно или выбрать, например, почтовый ящик Tencent, почтовый ящик Netease и т. д.
  • Отправка SMS. Отправка кодов подтверждения и маркетинговых SMS с помощью SMS — очень распространенный сценарий приложения. Поскольку SMS требует поддержки оператора, эта часть в основном должна полагаться на сторонних агентов. На рынке также есть много прокси-шлюзов для SMS.
  • Push-уведомления. Push-уведомления стали стандартной функцией мобильных приложений. В настоящее время Getui должен быть лидером среди сторонних push-сервисов, и из-за большого количества клиентов у него есть большое преимущество в пробуждении альянса.
  • Открытая платформа: через открытую платформу можно использовать OAuth и другие протоколы для получения информации о пользователе на сторонней платформе для входа в систему на сторонней платформе и т. д. В настоящее время Weibo, WeChat и QQ являются наиболее распространенными сторонними способами входа в систему, и они в основном используют протокол OAuth для предоставления услуг сторонним разработчикам.
  • Платежный интерфейс. Платежный интерфейс является необходимым компонентом многих встроенных программ для функций покупки. В настоящее время наибольший доступ имеют Alipay и WeChat, обе из которых предоставляют открытые платформы для доступа продавцов. Конечно, есть и прямая привязка банковских карт к оплате, в это время нужно использовать шлюзовой интерфейс банка или UnionPay.

базовые знания информатики

Базовые знания в области информатики, такие как структуры данных, алгоритмы, компьютерные сети, операционные системы и принципы компоновки компьютеров, будь то в области бэкэнда или в других областях, являются необходимыми навыками и основой всей разработки программного обеспечения. Надежная основа информатики позволит вам иметь прочную основу и доказательства, которым вы будете следовать при обучении, использовании определенной технологии для разработки программного обеспечения, отладки программного обеспечения и устранения неполадок.

  • Структуры данных. Структуры данных являются строительными блоками программы. К классическим структурам данных относятся: строки, массивы, связанные списки, хэш-таблицы, деревья (двоичные деревья, сбалансированные деревья, красно-черные деревья, B-деревья), стеки, очереди и графы.
  • Алгоритмы. Классические алгоритмы сортировки и поиска часто используются в повседневной работе по разработке, например: пузырьковая сортировка, сортировка вставками, сортировка выбором, сортировка слиянием, быстрая сортировка, сортировка по холму, сортировка по куче и двоичный поиск. Также обратите внимание на соответствующие преимущества и недостатки рекурсии и итерации в алгоритмической реализации функций/методов. Измерение производительности алгоритма — это не что иное, как пространственная и временная сложность.
  • Алгоритмы, связанные с бизнесом: Помимо вышеперечисленных базовых алгоритмов, в бизнесе часто задействованы некоторые более сложные алгоритмы, такие как: алгоритм сжатия, алгоритм кэширования LRU, согласованность кэша, конечный автомат в принципе компиляции и т. д. Кроме того, во все более популярном машинном обучении есть множество алгоритмов, которые также очень полезны во многих бизнес-сценариях, например: сегментация заикающихся слов для сегментации текста и ICTCLAS Китайской академии наук, TF-IDF и TextRank для извлечения ключевых слов; Тематическая модель, Word2Vec, косинусное сходство и евклидово расстояние для расчета сходства текста, Наивный Байес для классификации текста, Кластеризация, совместная фильтрация, пользовательский портрет, скрытая семантическая модель для рекомендации и т. д.
  • Компьютерная сеть: протокол TCP/IP является наиболее фундаментальным протоколом сети, и структура его семиуровневого/четырехуровневого стека протоколов очень важна, являясь фундаментальной основой для сетевых проблем. Начиная с TCP/IP и выше, протокол HTTP является протоколом, предоставляемым большинством серверных приложений, и теперь он вот-вот вступит в эру HTTP 2.0, предлагая новые захватывающие функции, такие как постоянные соединения и мультиплексирование соединений. Кроме того, протокол HTTPS, основанный на HTTP, постепенно становится основным протоколом для открытия внутренних сервисов для внешнего мира благодаря своей безопасности. На уровне бизнеса спецификация RESTful, основанная на протоколе HTTP, становится основной спецификацией для внешних интерфейсов, а протокол OAuth2.0 также становится основным внешним протоколом для открытой платформы. Помимо HTTP, SMTP — это еще один прикладной протокол, основанный на TCP/IP, который в основном используется для отправки почты.
  • Шаблоны проектирования: в разработке программного обеспечения опыт предшественников сформировал множество классических шаблонов проектирования, которые мы можем использовать, что может сделать реализацию программного обеспечения адаптируемой, расширяемой и удобной в сопровождении. Классический фабричный шаблон, простой фабричный шаблон, шаблон одиночного элемента, шаблон наблюдателя, шаблон прокси, шаблон строителя, шаблон фасада, шаблон адаптера и шаблон декоратора имеют большое значение во многих сценариях повседневной разработки.

данные

Теперь весь бизнес в Интернете фактически осуществляется вокруг данных. И передача данных, хранение данных, анализ и обработка данных являются ключевыми частями.

  • Кэш: Redis, наиболее широко используемое в настоящее время программное обеспечение для кэширования, может поддерживать разнообразные структуры данных, такие как: строки, списки, упорядоченные наборы и другое хранилище данных. Поймите принцип реализации кеша и стратегию устранения памяти, чтобы лучше использовать кеш. Кроме того, из-за высокой стоимости кэширования при использовании кэширования необходимо выполнять количественную оценку и оптимизацию хранилища.
  • База данных: одним из ключевых моментов в освоении базы данных является использование индекса.Можно сказать, что правильное использование индекса в основном равноценно освоению использования базы данных. В настоящее время большинство баз данных используют B-дерево в качестве структуры данных индекса, цель состоит в том, чтобы воспользоваться преимуществами характеристик последовательного чтения и записи диска. Различные базы данных имеют некоторые уникальные преимущества из-за их различных целей проектирования.Например, MongoDB естественным образом поддерживает сегментирование, но ограниченное NoSQL, оно не применимо в сценариях с тяжелыми транзакциями и отношениями; HBase использует LSM в качестве базовой структуры данных, жертвуя производительностью чтения в обмен на высокую скорость записи.
  • Поисковая система. Поисковая система в основном работает с бизнес-сценариями полнотекстового поиска и многомерных запросов. Освоение ключевых моментов структуры данных, метода кластеризации и конфигурации, используемых поисковой системой, поможет лучше использовать поисковую систему для обслуживания бизнес-приложений.
  • Очередь сообщений. Очередь сообщений имеет две роли: производитель и потребитель, и у этих двух ролей разные требования к очереди сообщений. Среди них для потребителей есть два способа потребления сообщений, включая публикацию-подписку и очередь. Очередь сообщений разделена на три режима: Максимум один раз, Хотя бы один раз и Точно один раз с точки зрения семантической гарантии.Необходимо выбрать соответствующую семантическую гарантию для более конкретных бизнес-сценариев. Кроме того, надежность очереди сообщений определяется гарантией высокой доступности и безопасности сообщений.
  • Хранение и обработка данных. Хранилище данных в конечном итоге используется для анализа и обработки. Обработка данных делится на автономную обработку и обработку в реальном времени. Преимущество автономной обработки заключается в том, что она может обрабатывать большой объем данных, но обычно существует задержка T+1, что подходит для сценариев, в которых объем вычислений велик, но допускаются задержки для результатов. Но для автономного анализа данных также существует очень важная проблема перекоса данных. Так называемая асимметрия данных относится к неравномерному распределению данных региона, что приводит к низкой нагрузке на некоторые узлы и высокой нагрузке на некоторые узлы, что влияет на общую производительность. Поэтому решение проблемы перекоса данных имеет решающее значение для автономной обработки данных. Обработка в реальном времени обычно представляет собой потоковую обработку, которая подходит для сценариев, в которых данные могут быть преобразованы в потоки данных, а результаты требуют своевременности. Для анализа данных в реальном времени следует отметить, что когда результаты обработки данных в реальном времени записываются в хранилище, следует учитывать проблемы параллелизма. Задачи читаются и пишутся одновременно. Обычное решение состоит в том, чтобы буферизовать данные во временном окне, а затем записывать их партиями.
  • Синхронизация данных. В дополнение к прямому журналу источником данных хранилища данных является очень важная бизнес-база данных. Процесс перехода от бизнес-базы данных к хранилищу данных называется синхронизацией данных. Существуют схемы синхронизации на основе SQL и схемы инкрементной синхронизации на основе MySQL binglog.

Java

Для навыков Java есть две основные части, включая программирование на Java и JVM.

Давайте сначала взглянем на часть программирования Java, которая также является самым основным навыком инженера Java.

  • IDE: наиболее часто используемыми Java IDE являются Eclipse и Intellij IDEA. Первый — это старая IDE, которая постепенно устранила Jbuilder и Netbeans, заняв большую часть рынка Java IDE. Последний является восходящей звездой.Благодаря повышению производительности благодаря инкрементальной компиляции и интеллектуальному анализу кода он теперь используется в больших масштабах и может заменить Eclipse.
  • Базовый синтаксис: в настоящее время чаще всего используется синтаксис Java JDK6. В Java7 были введены такие синтаксисы, как попытка с ресурсом, строка переключения и ромбы. Java8 представил лямбда, поток и другие синтаксисы.
  • Класс коллекции: класс коллекции является очень важной частью языка Java, включая: HashMap, ArrayList, LinkedList, HashSet, TreeSet и потокобезопасные ConcurrentHashMap, ConcurrentLinkedQueue и другие потокобезопасные коллекции. Необходимо понимать принципы их реализации и производительность запросов и модификаций, а также сценарии использования.
  • Классы инструментов: Google Guava, Apache commons, FastJson предоставляют множество классов инструментов, коллекций и т. д., которых нет в самом JDK. Кроме того, манипулирование байт-кодом ASM и генерация кода CGLIB могут обеспечить возможности программирования Java более низкого уровня.
  • Расширенные функции. Помимо базового программирования, лежащего в основе Java, параллельное программирование, обобщения, сетевое программирование и сериализованный RPC — все это расширенные функции программирования Java. Среди них параллельное программирование должно освоить различные инструменты параллелизма, предоставляемые Executors, инфраструктуру fork/join, представленную Java7, и инструменты синхронизации, такие как CountDownLatch, Semaphore и CyclicBarrier; сетевое программирование должно различать BIO, NIO и AIO; в сериализации , в дополнение к тому, что идет в комплекте с JDK Помимо реализации сериализации Protobuf и Kryo являются относительно эффективными сторонними реализациями, в реализации RPC, Thrift, Hessian, Dubbo и RMI — несколько часто используемых протоколов. Hessian основан на протоколе Http, а Dubbo основан на протоколе Http.TCP, а Thrift поддерживает оба.
  • JavaEE: JavaEE в настоящее время является наиболее распространенной областью приложений Java. Сервлет — один из самых фундаментальных компонентов JavaEE. Асинхронный сервлет, представленный Servlet3.0, повышает производительность обработки запросов.
  • Создание проекта: наиболее часто используемые инструменты создания проектов Java включают Maven и Gradle, которые предоставляют ряд функций, таких как управление зависимостями исходных пакетов, компиляция, упаковка и развертывание.
  • Среда программирования: Spring — неизбежная среда в программировании на Java.В дополнение к основным IOC и AOP Spring, SpringMVC, Spring Data, Spring Cloud, Spring Boot и т. д. — все они принесли разработку разработчикам Java. Удобство в Интернете значительно улучшилось. эффективность разработки; инфраструктура ORM MyBatis также является одной из наиболее популярных платформ в области Java, которая реализует операцию сопоставления записей базы данных с объектами Java; Jersey предоставляет полный набор спецификаций RESTful от клиента к серверу. . Кроме того, начали расти фреймворки асинхронного реактивного программирования, такие как Vert.x и Spring Flux, которые очень подходят для приложений с интенсивным вводом-выводом.
  • Тестирование: Тестирование является обязательным шагом в любом программировании. Тестирование черного ящика в основном относится к обычному функциональному тестированию, тогда как тестирование белого ящика в основном относится к тестированию функции и качества кода. Кроме того, ключевое модульное тестирование — это то место, на которое инженеры-разработчики должны обратить внимание, и концепция «разработки через тестирование» также является методом разработки, достойным восхищения. В настоящее время JUnit является основным решением для реализации модульного тестирования в Java.

Вообще говоря, овладение описанными выше навыками программирования на Java может справиться с большинством задач по программированию. Однако, если все усилия были предприняты на уровне кода, но требования к производительности по-прежнему не выполняются, некоторые усилия необходимо предпринять на уровне виртуальной машины JVM. Можно сказать, что освоение технологий, связанных с JVM, является ключевым шагом в развитии Java-разработки.

  • Реализация виртуальной машины. В дополнение к широко используемому HotSpot реализация виртуальной машины Java включает JRockit, J9, Dalvkit и ART для мобильных платформ (появившиеся после Android 4.4). Большинство оптимизаций JVM, которые мы обычно описываем, предназначены для виртуальной машины HotSpot.
  • Механизм загрузки классов: Машина загрузки классов JVM следует принципу родительского делегирования, то есть текущий загрузчик классов должен запросить родительский загрузчик сначала загрузить текущий класс, а затем попытаться загрузить его, если он не может завершиться сам. Среда OSGI ломает этот механизм и использует механизм загрузки равных и смешанных классов для достижения модульной схемы загрузки.
  • Состав оперативной памяти: счетчик программ, стек, область методов, куча, память вне кучи, которые вместе составляют оперативную память JVM.
  • Модель памяти Java: модель основной памяти Java + частной памяти потока является корнем проблем безопасности потоков.
  • Принцип и настройка GC: по сравнению с такими языками, как C и C++, GC является преимуществом Java, но поскольку детали GC защищены JVM, его трудно свободно контролировать в случае очень требовательных к памяти и производительности. требования.Это тоже недостаток. Если вы хотите максимизировать производительность GC в некоторых сценариях, вы можете оптимизировать конфигурацию различных параметров GC, таких как выбор сборщиков мусора для нового поколения и старого поколения, а также настройку различных параметров сборки мусора. Кроме того, во многих случаях из-за качества кода или внешних объективных факторов JVM часто выполняет сбор мусора, и для быстрого обнаружения и решения проблемы необходимо использовать соответствующие инструменты.
  • Инструменты настройки и мониторинга производительности: JDK поставляется с множеством мощных инструментов настройки и мониторинга, включая jmap, jstack, jcmd, jconsole, jinfo и т. д. Кроме того, btrace — это очень мощный онлайн-инструмент динамического устранения неполадок, который может динамически вставлять некоторую логику кода без перезапуска процесса Java, чтобы перехватывать логику выполнения кода и распечатывать журнал для устранения проблемы.

структура системы

Приложение, как правило, проходит эволюцию одного приложения, от вертикального приложения до архитектуры распределенных служб с нуля. Как показано ниже:

  • Монолитное приложение: когда масштаб приложения и размер команды относительно невелики, требуется только одно приложение, включающее все функции. Уменьшите количество узлов развертывания и сократите затраты на развертывание. На данный момент операция ORM в базе данных является ключевым моментом реализации архитектуры.
  • Вертикальное приложение: когда пользовательский масштаб приложения становится все больше и больше, а объем запросов становится все больше и больше. Потеря ресурсов, вызванная добавлением узлов в одно приложение, будет заметной, потому что большинство запросов интерфейса не особенно велики, и нет необходимости расширяться до нескольких узлов. На этом этапе одно приложение может быть разделено на несколько несвязанных приложений для предоставления внешних услуг соответственно. В настоящее время ключевым моментом реализации архитектуры является фреймворк MVC, ускоряющий разработку каждого приложения.
  • Распределенные сервисы: Когда появляется все больше и больше вертикальных приложений, взаимодействие между приложениями становится неизбежным. Отделенные от основного бизнеса и развернутые отдельно, постепенно сформировали стабильный сервисный центр. С соответствующим расширением размера команды сервисов будет становиться все больше и больше с увеличением команды, а гранулярность будет становиться все меньше и меньше, и постепенно будет формироваться архитектура распределенных сервисов, которую можно назвать микросервисами, если количество услуг в определенной степени велико. То есть после проектирования границ бизнеса исходное отдельное приложение разбивается на детализированные сервисы, которые каким-то образом взаимодействуют друг с другом. Ключом к микросервисной архитектуре является то, как управлять, планировать и поддерживать сервисы. В настоящее время Dubbo является наиболее используемым фреймворком в микросервисной архитектуре, но Dubbo решает только часть проблем в микросервисной архитектуре. Весна Облако в основном охватывает все аспекты архитектуры микросервисов.

Архитектура развертывания

Для веб-приложений LVS+Nginx+Tomcat+MySQL+Redis может сформировать простую и общую архитектуру развертывания, как показано на следующем рисунке:

  • Как самый передний узел, LVS отвечает за пересылку трафика и балансировку нагрузки на четвертом уровне сети.
  • Несколько LVS используют Keepalived для обеспечения высокой доступности друг для друга.
  • В качестве обратного прокси-сервера Nginx отвечает за пересылку трафика и балансировку нагрузки на седьмом уровне сети.
  • Tomcat используется как бизнес-контейнер, и в нем находится основной код приложения.
  • Redis действует как кеш для изоляции большого количества одновременных запросов от серверной базы данных.
  • MySQL сохраняет данные в режиме master-slave.

Среди них пунктирная часть — это уровень базы данных, который работает в режиме ведущий-ведомый. Вместо этого также можно использовать Redis Cluster (Codis и т. д.), а также MySQL Cluster (Cobar и т. д.).

Эта статья взята из книги «Путь развития инженера Java».