Изучив более 100 технологий, смогу ли я стать архитектором? (не реклама)

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

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

Несколько дней назад друг, который занимался обучением, попросил у меня расширенную дорожную карту java-бэкенда, поэтому я отправил ему эту статью."Должен видеть! java back-end, яркий меч Чжусянь". Сегодня хочу самые часто используемые инструменты и фреймворки для java backend.Такую картинку довелось нарисовать раньше, вот и отправил ему. Хотя и не очень полный, но и надеемся получить его похвалу. не ожидал...

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

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

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

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

Kafka в настоящее время является наиболее часто используемой очередью сообщений, особенно в больших данных, с чрезвычайно высокой пропускной способностью. Rocketmq и rabbitmq — это очереди сообщений телекоммуникационного уровня, которые больше используются в бизнесе. В 2019 году перестаньте пялиться на JMS (это раздутый ActiveMQ).

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

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

2. Кэш

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

Для одной машины кэш guava и ehcache — знакомые лица.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5. Общение

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

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

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

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

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

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

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

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

Слияние компонентов, официальный hystrix больше не поддерживается. Рекомендуется Resilience4j, а дозорный Ali также показал хорошие результаты в последнее время.

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

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


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

Для весеннего облака серии zuul рекомендуется использовать zuul2, zuul1 является многопоточной блокировкой и имеет недостатки. spring-cloud-gateway является родным для весеннего облака, но в настоящее время широко не используется.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

11. ОЛТ(А)П

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

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

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

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

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

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

12. КИ/КД

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

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

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

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

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

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

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

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

«В Linux наиболее часто используемый пакет анализа команд (выбор за 10 лет)»

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

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

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

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

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

End

Сегодня 13 августа 2019 года. Тайфун Ликима только что закончил свое разрушительное действие.

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

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

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

Последние популярные статьи​

"Должен видеть! java back-end, яркий меч Чжусянь"
Указатель серверных технологий, актуальный и популярный

«В Linux наиболее часто используемый пакет анализа команд (выбор за 10 лет)»В первый день релиза CSDN 1к лайков. Вроде скорость 1/8.

«Если на этот раз я не пойму основные компоненты Spring Cloud, то я зря придумаю эту историю»Используйте истории, чтобы объяснить основные компоненты, чтобы обеспечить ваше удовлетворение

«Наиболее часто используемый набор навыков «Sed» в производственной среде Linux.Наиболее часто используемая серия статей Sed, простая для понимания. Главы Vim легче понять.