Оригинал: 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 легче понять.