Основные навыки архитектора, выберите компоненты! (версия обновления 2020 г.)

Java Архитектура

Оригинал: Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.

В 2020 обновлены описания некоторых компонентов. статью 19 лет см.здесь. Если вы работаете над определением размера или хотите узнать о некоторых технологиях, которые сейчас популярны, эта статья для вас.

Эта статья охватывает 14 аспектов, включая сотни фреймворков и инструментов. Будут люди, которые вам нравятся, и, вероятно, будут люди, которых вы ненавидите. Это инструмент, с которым я чаще всего сталкиваюсь в своей повседневной работе, и он работает как в больших, так и в малых компаниях. Если у вас есть лучшие, пожалуйста, оставьте сообщение, чтобы добавить.

一、消息队列
二、缓存
三、分库分表
四、数据同步
五、通讯
六、微服务
七、分布式工具
八、监控系统
九、调度
十、入口工具
十一、OLT(A)P
十二、CI/CD
十三、问题排查
十四、本地工具

Во-первых, очередь сообщений

  • √ Рекомендуется: (1) приоритет пропускной способностиkafka
  • (2) предпочтительна стабильностьRocketMQ
  • (3) Интернет вещей:VerneMQ

Большая распределенная система обычно асинхронна и использует шину сообщений.Как важнейший базовый компонент, очередь сообщений играет чрезвычайно важную роль во всей архитектуре. Асинхронность обычно означает изменение модели программирования с меньшей своевременностью.

kafkaВ настоящее время это наиболее часто используемая очередь сообщений, особенно с точки зрения больших данных, с чрезвычайно высокой пропускной способностью. иrocketmqиrabbitmq, которые являются очередями сообщений телекоммуникационного уровня, которые больше используются в бизнесе. Сравнение,ActiveMQНаименее используемый, относящийся к старому поколению фреймворков обмена сообщениями.

pulsarрешить некоторыеkafkaСистема сообщений, которая родилась из вышеперечисленных проблем, относительно молода и имеет ограниченный набор инструментов. Некоторые агрессивные команды опробовали его и хорошо отреагировали, но не использовали его часто.

mqttВ частности, это протокол, в основном используемый в Интернете вещей, способный к двусторонней связи, относящийся к категории очередей сообщений, рекомендуемый к использованию.vernemq.

Статьи по Теме:
"общий"Распределенная система обмена сообщениями, основы дизайна. Рисовать дракона и рисовать тигра сложно рисовать кости
"Кафка"Индекс основ Кафки
"Кафка"Тест на 360 градусов: потеряет ли KAFKA данные? Соответствует ли его высокая доступность спросу?
"Кафка"Используйте многопоточность для увеличения потребляемой мощности kafka
"АМК"Дизайн архитектуры ActiveMQ и лучшие практики, нужно 10 000 слов
"МК"Расширение Kafka с открытым исходным кодом: okmq-1.0.0

2. Кэш

  • √ Рекомендация: (1) Используйте кеш в куче по умолчанию.caffeine
  • (2) Распределенный кеш принимает режим кластерного кластера Redis, но обратите внимание на ограничения использования

Кэширование данных — эффективный способ уменьшить нагрузку на базу данных.Существуют автономные кэши Java и распределенные кэши.

Для одной машины,guavaизLoadingCacheиehcacheВсе они знакомые лица, но SpringBoot выбралcaffeineв качестве кэша в куче по умолчанию, это потому, чтоcaffeineПричина более высокой скорости.

Для распределенного кэширования предпочтительным выбором являетсяredis,не стесняйтесь. Поскольку Redis является однопоточным (6.0 поддерживает многопоточность, но по умолчанию она не включена), он не подходит для операций, требующих больших затрат времени. Поэтому для некоторых кэшей с относительно большим объемом данных, таких как картинки, видео и т.д., используйте старомодныйmemcachedЭффект будет намного лучше.

JetCacheЭто пакет системы кэширования на основе Java, который предоставляет унифицированные API и аннотации для упрощения использования кэшей. Подобно SpringCache, он поддерживает локальный и распределенный кэш, а также является инструментом, упрощающим разработку.

Статьи по Теме:
"Редис"Это, вероятно, наиболее подходящая спецификация Redis.
"Редис"Иметь тесный контакт с вашим собственным кластером Redis
"Редис"Насколько хорош Redis' zset? пожалуйста, передай ухо
"Редис"Я так нервничаю. С таким количеством кластерных решений для Redis, какое мне следует использовать?
"протокол"Советы по архитектуре: переместите цветы и деревья. Имитация Redis с помощью mysql
"Редис"Redis стареет, какой старый клиент вы все еще используете?
«Внутри кучи»Кэш нового поколения Caffeine, скорость действительно выше, чем у кеша Guava.

3. Подтаблица подбиблиотеки

  • √ Рекомендуется: sharding-jdbc в shardingsphere

Подбиблиотеки и подтаблицы, почти каждая компания в масштабе будет иметь свой собственный план. В настоящее время рекомендуется использовать слой драйвераsharding-jdbc(вошел в apache) или уровень проксиmycat. Если у вас нет дополнительной рабочей группы и вы не хотите тратить деньги на другие машины, выберите первое.

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

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

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

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

Статьи по Теме:
«Подбиблиотека и подтаблица»"Подтаблица подбиблиотеки"? Выбор и процесс должны быть осторожны, иначе он выйдет из-под контроля
"синхронизация данных"Я надеюсь, что синхронизация данных может вылечить все болезни
«Подбиблиотека и подтаблица»«Практика» подбазы данных и подтаблицы
"ХА"«Официальный драйвер MySQL» Тайна разделения Master-Slave
«Шардинг»Правила маршрутизации в действительности могут быть сложнее, чем вы думаете
«Шардинг»sharding-jdbc практика нестандартного SQL

4. Синхронизация данных

  • √ Рекомендуется: канал

домашнее использованиеmysqlБольшинство компаний, но postgresql с его отличной производительностью постепенно расширяет свое использование.

Независимо от того, какая база данных или инструмент синхронизации данных в реальном времени, он имитирует себя как подчиненную библиотеку для извлечения и анализа данных.В частности, mysql синхронизируется через binlog, а postgresql — с помощью wal log.

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

Теперь такие инструменты, как canal и maxwell, поддерживают запись данных для синхронизации в mq для последующей обработки, что намного удобнее.

Для ETL (извлечение, очистка, преобразование) это в основном маршруты источника, задачи, приемника, соответствующие предыдущим функциям. gobblin, datax, logstash, sqoop и т. д. — все это такие инструменты.

Их основная задача — легко определить файлы конфигурации и написать различные интерфейсы адаптации источников данных. Эти инструменты ETL также можно использовать в качестве инструментов для синхронизации данных (особенно для полной синхронизации), обычно на основеID,илиВремя последнего обновленияждать обработки.

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

Статьи по Теме:
«Облачная библиотека»MySQL атрофирован и не может хранить столько данных!
"синхронизация данных"Общий процесс анализа архитектуры промежуточного программного обеспечения интеграции по компонентам Canal
«Облачная библиотека»Помни понижение ебаного плана (ухабистая дорога к разделению горячего и холодного на облаке)

5. Общение

  • √ Рекомендуется: http+json, легко отлаживать. Дополнительный двоичный протокол для высоких требований к производительности

В Java netty стала заслуженной средой разработки сети, включаяsocketio(Не упоминай мину при мне снова). Для протокола http естьcommon-httpclientи другие легкие инструментыokhttpподдерживать.

Для RPC необходимо согласовать метод связи и метод сериализации.jsonЭто наиболее часто используемый метод сериализации, но стоимость передачи и парсинга высока, а текстовые протоколы, такие как xml, похожи на них, и много избыточной информации;avroиkryoЭто инструмент бинарной сериализации без этих недостатков, но его неудобно отлаживать.

rpc означает удаленный вызов процедуры,в,thrift,dubbo,gRPCПо умолчанию используется структура связи через сокеты с двоичной сериализацией;feign,hessianобаonhttpПлатформа удаленного вызова.

Кстати, инструмент сериализации gRPC — это protobuf, инструмент сериализации бинарных файлов с высокой степенью сжатия.

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

Статьи по Теме:
"Веб-разработка"С Нетти, что именно мы разрабатываем?
"ВС"Протокол WebSocket 8 Вопросы

6. Микросервисы

  • √ Рекомендуем: (1) Центр регистрации: консул
  • (2) Шлюз: nginx+Шлюз
  • (3) Центр конфигурации: Apollo
  • (4) Цепочка вызовов: Skywalking
  • (5) Слияние: resilience4j

Мы уже не раз говорили о микросервисах, и на этот раз мы взглянем на систему из стека окружающих ее поддерживающих фреймворков. Да тут еще об этом говорятspring cloud.

реестр по умолчаниюeurekaбольше не поддерживается,consulУже предпочтительный, он использует протокол raft для разработки из коробки. В качестве альтернативы можно использовать Nacos, zookeeper и т. д. Среди них у нако есть предыстория, которая больше подходит для использования китайцами.

Плавкие компоненты, официальныеhystrix也Он больше не поддерживается. Рекомендуемое использованиеresilience4j, недавно Алиsentinelтоже выступил сильно.

В цепочке вызовов, благодаря развитию OpenTracing, появилось много новых лиц. Рекомендуемое использованиеjaegerилиskywalking. Интегрированная в весеннее облако функция сыщика+зипкина немного слабее, даже не так хороша, как традиционная навязчивая кошка.

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


Что касается шлюзов, наиболее часто используемым являетсяnginx,существуетnginxКроме того, существуют lua-скрипты, основанные наopenrestry. так какopenrestyИспользование kong очень сложно, поэтому существует шлюз с более высоким уровнем инкапсуляции, такой как kong.

Для весеннего облака серии zuul рекомендуется использовать zuul2, zuul1 является многопоточной блокировкой и имеет недостатки. spring-cloud-gateway является родным для весеннего облака, активно поддерживается Spring Cloud и основан на новых функциях Spring 5.0.WebFluxразвивать. Базовая структура сетевой связи использует Netty, обладающую высокой пропускной способностью.

Связанные документы:
"общий"Если на этот раз я не пойму основные компоненты Spring Cloud, то я зря придумаю эту историю.
"общий"Микросервисы — это не все, а лишь подмножество определенного домена.
"СКГ"4D Spring Cloud Gateway 2.0, технология, ориентированная на будущее, понимаете?
"След"Длинный текст из 2 слов, позволит вам мгновенно получить опыт разработки «цепочки вызовов»
"Фьюзинг"Аккуратно крутите и крутите медленно, микросервисы плавят большого менеджера

7. Распределенные инструменты

Всем известно, что распределенную систему zookeeper можно использовать во многих сценариях, и она похожа на etcd и consul, основанные на протоколе raft.

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

Для распределенных транзакций его поддерживает инструмент Ali fescar. Однако без крайней необходимости используйте柔性事务,поиск最终一致性,Лучше.

Восемь, система мониторинга

  • √ Рекомендуется: прометей + графана + телеграф
  • Сбор логов: много ELKB, мало локи

Существует много типов компонентов системы мониторинга, в настоящее время наиболее популярными являются, пожалуй, четыре вышеуказанных типа.

Zabbix — очень хороший выбор, когда хостов немного.

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

Компоненты influxdb и telegraf в influxdata просты в использовании, главным образом потому, что они полностью функциональны.

Использование цепочки инструментов elkb, хранящейся в es, также является лучшим выбором. Многие компании, которые я знаю, используют его.

Связанные документы:

"общий"С таким количеством компонентов мониторинга всегда найдется подходящий для вас
"бревно"elkb практический опыт, а потом набор сложных конфигурационных файлов
"бревно"«ДНК» сбора логов
"бревно"Практикуйте Локи и ощутите легкость танца на ладони.
"бревно"твои полевые цветы, моя кибана
"бревно"Обычные люди не посмеют передвинуть сериал - лог "норма" и "десенсибилизация" на основе логбека
"монитор"Прометей, который раньше учил людей пользоваться огнем, теперь пытается вызвать полицию
"АПМ"Длинный текст из 2 слов, позволит вам мгновенно получить опыт разработки «цепочки вызовов»
"АПМ"В этом раунде побеждает Skywalking
"Нижний"Непопулярный пакет инструментов, функция d fried sky
"Нижний"Твоя тоже моя. 3 случая ко многопоточности, прозрачная передача локальных переменных

9. Планирование

  • √ Рекомендуется: xxl-job

Наверное, все использовали cron-выражения. Это выражение изначально взято из инструмента crontab в Linux.

Quartz — это древняя схема планирования в Java.Распределенное планирование использует блокировки базы данных, а интерфейс управления необходимо разрабатывать самостоятельно.

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

10. Инструмент ввода

  • √ Рекомендуется: lvs

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

Среди них широко используются haproxy, lvs, keepalived и т.д.

Сервер обычно использует Centos с большей стабильностью и оснащен инструментами Ansible для поддержки, что круто.

11. ОЛТ(А)П

  • √ Рекомендуется: ЕС

На современных предприятиях объем данных очень велик, и хранилище данных просто необходимо.

С точки зрения поиска более популярны solr и elasticsearch, они основаны на lucene. Solr более зрелый и стабильный, но он не так хорош в поиске в реальном времени, как es.

Что касается столбцового хранилища, наиболее широко используется hbase на основе Hadoop; leveldb на основе LSM имеет более высокую производительность записи, но в настоящее время он в основном используется в качестве встроенного механизма.

tidb является отечественным выскочкой и совместим с протоколом mysql.Компания экспортирует dba через обучение, и можно ожидать будущего.

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

Cassandra была популярна некоторое время, когда только появилась, хотя есть новости, что Facebook от нее отказался, экология сформировалась, и она круглый год занимает топ-15 движков баз данных.

12. КИ/КД

.jpg)

Для поддержки непрерывной интеграции и виртуализации у нас есть и другие инструменты помимо знакомого докера.

Jenkins — лучший выбор для упаковки и публикации, ведь он был старшим братом на протяжении стольких лет. Конечно, компания, написавшая Idea, также выпустила инструмент под названием TeamCity с очень удобным интерфейсом.

Солор, надо сказать, артефакт, после его использования код маленьких друзей стал красным, и я чуть не утонул в косах.

Для внутренних компаний gitlab обычно используется для создания git-сервера. На самом деле, gitlab CI в нем тоже очень удобен в использовании.

Harbor,существуетdocker registry На этой основе возможности управления, такие как контроль разрешений, аудит, зеркальная синхронизация и интерфейс управления, были расширены, и их рекомендуется использовать.

С точки зрения планирования,k8sGoogle имеет открытый исходный код, активно продвигается сообществом, и есть много планов внедрения.RancherФункционал k8s расширен, а также реализован ряд удобных инструментов для взаимодействия с кластерами k8s, включая выполнение командных строк, управление несколькими кластерами k8s, просмотр состояния работы узлов кластера k8s и т. д. Рекомендуется интегрировать.

Статьи по Теме:
«Непрерывная интеграция»Неужели так сложно опубликовать систему?
"Процесс"Технический обзор, что вы используете, чтобы пожаловаться?
"Процесс"Невидимая рука в R&D очень ранит
"Спецификация"Вы не привыкли к иностранным нормам? Научит вас, как расширить стандартный плагин идеи Ali
"инструмент"Будете ли вы по-прежнему использовать FastDFS с MinIO?

13. Устранение неполадок

Java часто имеет проблемы с переполнением памяти. После экспорта стека с помощью jmap я обычно использую mat для более глубокого анализа.

Для онлайн-анализа в реальном времени есть два инструмента: arthas и perf.

Конечно, для этого существует множество инструментов Linux.

Статьи по Теме:
«В Linux наиболее часто используемый пакет анализа команд (выбор за 10 лет)»
Самый распространенный набор трюков "Вим"
Наиболее часто используемый набор приемов «Сэд»
Наиболее часто используемый набор техник "AWK"

14. Локальные инструменты

Существует больше пакетов jar и инструментов, используемых локально. Ниже приведены лишь некоторые из наиболее часто используемых.

Что касается пулов соединений с базами данных, Druid наиболее часто используется в Китае. В настоящее время существует самый быстрый пул соединений с базой данных hikari, а также устаревшие dbcp и c3p0.

Что касается json, то в Китае больше всего используется fastjson, и каждые три дня появляются лазейки; в зарубежных странах чаще используется jackson. Их API похожи, с большим количеством функций jackson, но fastjson проще в использовании. Учитывая частые проблемы с безопасностью при использовании fastjson, в настоящее время наблюдается волна де-fastjson.

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

End

Сегодня 08.09.2020.

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

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

Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус.