Эта статья участвовала в "Проект «Звезда раскопок»”, чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам.
предисловие
Воспользовавшись недавним праздником Национального дня, я специально отобрал 11 проектов божественного уровня, исходный код которых открыт для Alibaba.
Большинство из этих проектов с открытым исходным кодом я использовал в реальной работе или использовали коллеги. Это действительно хорошо, очень ценно, и теперь я рекомендую его всем.
1. Druid
Druid утверждает, что является лучшим пулом соединений с базой данных на языке Java, и он может предоставлять мощные функции мониторинга и расширения. Фон мониторинга показан на следующем рисунке:
Основные преимущества Друида заключаются в следующем:
- Он может отслеживать производительность доступа к базе данных.
- Он предоставляет WallFilter, который основан на семантическом анализе SQL для обеспечения защиты от атак путем внедрения SQL.
- Он предоставляет различные средства для мониторинга утечек соединения.
- Он обеспечивает функцию шифрования пароля базы данных.
- Он может печатать журналы выполнения SQL.
адрес гитхаба:GitHub.com/alibaba/import…
Центральный склад Maven:Внутри репозитория MV.com/artifact/co…
Настройте зависимости maven:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid-version}</version>
</dependency>
2. fastjson
fastjson
Это библиотека синтаксического анализа JSON от Alibaba с открытым исходным кодом, которая может анализировать строки в формате JSON, поддерживать сериализацию Java Beans в строки JSON и десериализацию из строк JSON в JavaBeans.
Основные преимущества fastjson заключаются в следующем:
- Быстрый, fastjson быстр по сравнению с другими библиотеками JSON.С тех пор, как fastjson выпустил версию 1.1.x в 2011 году, его производительность никогда не была выше других библиотек JSON, реализованных на Java.
- Широко используемый, fastjson широко используется в Alibaba, развернут на десятках тысяч серверов, и fastjson широко принят в отрасли. В 2012 году оно было выбрано Open Source China одним из самых популярных отечественных программ с открытым исходным кодом.
- Простой в использовании, API fastjson очень лаконичен.
//序列化
String text = JSON.toJSONString(obj);
//反序列化
VO vo = JSON.parseObject("{...}", VO.class);
- Полные функции, поддержка дженериков, поддержка потоковой обработки большого текста, поддержка перечисления, поддержка расширений сериализации и десериализации.
адрес гитхаба:GitHub.com/alibaba/happening…
центральный репозиторий maven:Внутри репозитория MV.com/artifact/co…
Настройте зависимости maven:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
3. Dubbo
Apache Dubbo — это среда разработки микросервисов, предоставляющая две ключевые возможности: RPC-связь и управление микросервисами. Это означает, что микросервисы, разработанные с использованием Dubbo, будут иметь возможность удаленно обнаруживать друг друга и взаимодействовать друг с другом. может быть достигнут.
В то же время Dubbo обладает высокой расширяемостью, и пользователи могут настроить свою реализацию практически в любой функциональной точке, чтобы изменить поведение платформы по умолчанию в соответствии с потребностями своего бизнеса. В настоящее время он передан Apache для управления и обслуживания.
Схема архитектуры выглядит следующим образом:
Основные преимущества Dubbo заключаются в следующем:
- RPC на основе прозрачного интерфейса
- Умная балансировка нагрузки
- Автоматическая регистрация и обнаружение служб
- Высокая масштабируемость
- Маршрутизация трафика во время выполнения
- Управление визуальными услугами
- дружественный к облаку
адрес гитхаба:GitHub.com/Apache/Belly Daddy…
центральный репозиторий maven:Внутри репозитория MV.com/artifact/co…
Настройте зависимости maven:
<properties>
<dubbo.version>3.0.3</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
4. Rocketmq
Apache RocketMQ — это распределенная платформа обмена сообщениями и потоковой передачи с малой задержкой, высокой производительностью и надежностью, емкостью триллиона уровней и гибкой масштабируемостью.
Он обеспечивает несколько функций:
- Шаблоны обмена сообщениями, включая публикацию/подписку, запрос/ответ и потоковую передачу
- Новости транзакций финансового уровня
- Встроенные параметры отказоустойчивости и высокой доступности на основе DLedger.
- Несколько межъязыковых клиентов, таких как Java, C/C++, Python, Go
- Подключаемые транспортные протоколы, такие как TCP, SSL, AIO
- Встроенная возможность отслеживания сообщений, также поддерживает opentracing
- Универсальная интеграция больших данных и экосистем потокового мультимедиа
- Трассировка сообщения по времени или смещению
- Надежный FIFO и строго упорядоченная доставка сообщений в одной очереди
- Эффективная модель потребления «тяни-толкай»
- В одной очереди могут храниться миллионы сообщений
- Несколько протоколов обмена сообщениями, таких как JMS и OpenMessaging.
- Гибкая распределенная масштабируемая архитектура развертывания
- Молниеносная система обмена пакетными сообщениями
- Различные механизмы фильтрации сообщений, такие как SQL и Tag
- Образы Docker для изолированного тестирования и изолированных от облака кластеров
- Многофункциональная панель управления для настройки, метрик и мониторинга
- Аутентификация и авторизация
- Бесплатные соединители с открытым исходным кодом для источников и приемников
Интерфейс управления фоном Rocketmq:
адрес гитхаба:GitHub.com/Apache/рок…
центральный репозиторий maven:Внутри репозитория MV.com/artifact/or…
Rocketmq включает в себя: сервер и клиент.В нашем проекте мы в основном ориентируемся на код клиента.
Настройте зависимости maven:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.3.0</version>
</dependency>
5. Arthas
Arthas - это диагностический инструмент Java с открытым исходным кодом из Alibaba, который очень популярен среди разработчиков.
Артас может помочь вам, когда вы столкнулись с такими проблемами, как:
- Из какого пакета jar загружается этот класс? Почему сообщается о различных исключениях, связанных с классом?
- Почему код, который я изменил, не выполняется? Это потому, что я не совершал? Ветвь неправильная?
- Если вы столкнулись с проблемой и не можете отладить ее онлайн, можете ли вы опубликовать ее повторно, только добавив журнал?
- Есть проблема с обработкой данных пользователя онлайн, но ее нельзя отладить онлайн или воспроизвести офлайн!
- Есть ли глобальный вид, чтобы увидеть работоспособность системы?
- Есть ли способ отслеживать рабочее состояние JVM в реальном времени?
- Как быстро найти горячие точки приложения и сгенерировать график пламени?
- Как найти экземпляр класса прямо из JVM?
Время потребления кода анализа:Arthas поддерживает JDK 6+ и может работать в различных операционных системах, таких как: Linux/Mac/Windows, используя режим взаимодействия с командной строкой и предоставляя богатые функции автозаполнения вкладок для дальнейшего облегчения обнаружения и диагностики проблем.
адрес гитхаба:alibaba.github.io/arthas/
центральный репозиторий maven:Внутри репозитория MV.com/artifact/co…
Выполните следующую команду на целевой машине, чтобы запустить Arthas:
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
6. Nacos
Nacos — это простая в использовании платформа, предназначенная для динамического обнаружения и настройки сервисов, а также управления ими. Это поможет вам легко создавать облачные приложения и микросервисные платформы.
Сервис - первоклассный гражданин Накоса. Nacos поддерживает практически все типы сервисов, например сервисы Dubbo/gRPC, сервисы Spring Cloud RESTFul или сервисы Kubernetes.
Nacos обеспечивает четыре основные функции.
-
服务发现和服务健康检查
. Nacos упрощает регистрацию сервисов и обнаружение других сервисов через интерфейсы DNS или HTTP. Nacos также обеспечивает проверку работоспособности сервисов в режиме реального времени, чтобы предотвратить отправку запросов на неработоспособные хосты или экземпляры сервисов. -
动态配置管理
. Службы динамической настройки позволяют централизованно и динамически управлять конфигурацией всех служб во всех средах. Nacos устраняет необходимость повторного развертывания приложений и служб при обновлении конфигурации, что делает изменения конфигурации более эффективными и гибкими. -
动态 DNS 服务
. Nacos поддерживает взвешенную маршрутизацию, упрощая реализацию балансировки нагрузки среднего уровня, гибких политик маршрутизации, управления трафиком и простых служб разрешения DNS в производственной среде в центре обработки данных. Это помогает легко реализовать обнаружение служб на основе DNS и предотвращает привязку приложений к API-интерфейсам обнаружения служб конкретного поставщика. -
服务和元数据管理
. Nacos предоставляет простую в использовании панель инструментов службы, которая поможет вам управлять метаданными службы, конфигурацией, kubernetes DNS, состоянием службы и статистикой показателей.
Карта Накоса:
Экологическая карта Накоса:
адрес гитхаба:GitHub.com/alibaba/вывезти…
центральный репозиторий maven:Внутри репозитория MV.com/artifact/co…
7. easyexcel
Наиболее известными фреймворками для парсинга Java и генерации Excel являются Apache poi и jxl. Но у всех у них есть серьезная проблема, то есть они потребляют много памяти.Пои имеют набор API режима SAX, которые могут в определенной степени решить некоторые проблемы с переполнением памяти, но у POI все еще есть некоторые дефекты, такие как версия 07. распаковки Excel и хранения после распаковки.Это делается в памяти, и потребление памяти по-прежнему очень велико.
easyexcel переписал анализ POI версии 07 Excel, 3M excel по-прежнему требуется около 100M памяти, чтобы использовать POI sax для синтаксического анализа, использование easyexcel может уменьшить его до нескольких мегабайт, и независимо от того, насколько велик Excel, не будет переполнение памяти; версия 03 зависит от POI. Режим саксофона инкапсулирует преобразование модели на верхнем уровне, что делает его проще и удобнее для пользователей.
Память 64M читает 75M (46W строк и 25 столбцов) Excel в течение 1 минуты
адрес гитхаба:GitHub.com/Alibaba/EAS…
центральный репозиторий maven:Внутри репозитория MV.com/artifact/co…
Настройте зависимости maven:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
8. Sentinel
По мере того, как распределенные системы становятся все более популярными, надежность между службами становится важнее, чем когда-либо.
Sentinel использует «трафик» в качестве точки входа и работает во многих областях, таких как управление трафиком, формирование трафика, объединение и адаптивная защита системы, чтобы обеспечить надежность и эластичность микросервисов.
Sentinel имеет следующие особенности:
-
丰富的适用场景
: Sentinel широко используется в Alibaba, охватывая почти все основные сценарии торгового фестиваля Double 11 (11.11) за последние 10 лет.Ненадежное отключение услуги, управление кластерным потоком и т. д. -
实时监控
: Sentinel также предоставляет возможности мониторинга в реальном времени. Вы можете просматривать информацию о времени выполнения отдельной машины в режиме реального времени, а также сводную информацию о времени выполнения кластеров с менее чем 500 узлами. -
广泛的开源生态系统
: Sentinel предоставляет готовые интеграции с популярными платформами и библиотеками, такими как Spring Cloud, Dubbo и gRPC. Вы можете легко использовать Sentinel, просто добавив зависимость адаптера к своей службе. -
多语言支持
: Sentinel обеспечивает встроенную поддержку Java, Go и C++. -
丰富的SPI扩展
: Sentinel предоставляет простой в использовании интерфейс расширения SPI, который позволяет быстро настраивать логику, например управление пользовательскими правилами, адаптацию источников данных и т. д.
Функциональный обзор:
Экосистемный ландшафт:
адрес гитхаба:GitHub.com/alibaba/s ru…
центральный репозиторий maven:Внутри репозитория MV.com/artifact/co…
Настройте зависимости maven:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.2</version>
</dependency>
9. otter
Компания Alibaba B2B, из-за особенностей бизнеса, продавцы в основном сосредоточены в Китае, а покупатели в основном сосредоточены в зарубежных странах, поэтому возник спрос на удаленные компьютерные залы в Ханчжоу и США. написано, и таким образом родился такой продукт, как выдра.
Первую версию otter можно проследить до 2004 ~ 05. Внешняя версия с открытым исходным кодом является четвертой версией. Время разработки продолжалось с июля 2011 года по настоящее время. В настоящее время требования к синхронизации локальных/удаленных компьютерных залов в Alibaba B2B в принципе полные.На отте4.
Текущий размер синхронизации:
- Объем синхронизированных данных 600 миллионов
- Синхронизация файлов 1,5 ТБ (2000 Вт изображений)
- Включает синхронизацию между более чем 200 экземплярами базы данных.
- Размер кластера 80+ машин
Что может решить выдра?
-
异构库同步
. mysql -> mysql/oracle (в настоящее время версия с открытым исходным кодом поддерживает только инкрементный mysql, целевой библиотекой может быть mysql или oracle, в зависимости от функции канала) -
单机房同步
(RTTа. Обновление версии базы данных
б. Миграция таблицы данных
в. Асинхронный вторичный индекс
-
异地机房同步
(Например, международная станция Alibaba — это синхронизация базы данных между Ханчжоу и компьютерным залом США, RTT> 200 мс, подсветка)а. Аварийное восстановление компьютерного зала
-
双向同步
а. Избегайте алгоритма обратной связи (общее решение, поддерживает большинство реляционных баз данных)
б. Алгоритм непротиворечивости данных (гарантированно обеспечивает окончательную непротиворечивость данных в режиме двойного компьютерного зала, основные моменты)
-
文件同步
Зеркальное отображение сайта (копирование связанных изображений при копировании данных, например копирование данных продукта и копирование изображений продукта).
Принципиальная схема работы:
Схематическая диаграмма репликации одного компьютерного зала:
Схематическая диаграмма репликации удаленного компьютерного зала:
адрес гитхаба:GitHub.com/Alibaba/Отт…
центральный репозиторий maven:Внутри репозитория MV.com/artifact/co…
10. P3C
Плагин P3C представляет собой руководство Alibaba по кодированию Java, которое включает в себя лучшие практики программирования, разработанные технической командой Alibaba Group за многие годы. Поскольку мы поощряем повторное использование и лучшее понимание программ друг друга, большое количество групп программистов Java предъявляют высокие требования к качеству кода в разных проектах.
В прошлом у Alibaba было много проблем с программированием. Например, несовершенная структура таблиц базы данных и структура индексов могут привести к ошибкам в архитектуре программного обеспечения и рискам для производительности. Другой пример — беспорядочная структура кода, которую трудно поддерживать. Кроме того, неаутентифицированный уязвимый код уязвим для хакеров. Чтобы решить эти проблемы, мы написали этот документ для разработчиков Java в Alibaba.
Для получения дополнительной информации, пожалуйста, обратитесь к Руководству по кодированию Java на Alibaba:
- Китайская версия: Руководство по разработке Java для Alibaba
- Английская версия: Руководство по кодированию Java на Alibaba
Проект состоит из 3-х частей:
- реализация PMD
- Плагин IntelliJ IDEA
- Плагин Eclipse
На основе PMD реализовано 49 правил.Подробнее см. в документации P3C-PMD. В подключаемых модулях IDE (IDEA и Eclipse) реализованы следующие четыре правила:
- [Обязательно] Использование устаревших классов или методов запрещено.
Примечание. Например, следует использовать decode(String source, String encode) вместо устаревшего метода decode(String encodeStr). Как только интерфейс устарел, поставщик интерфейса обязан предоставить новый интерфейс. При этом клиентский программист обязан проверить, какова его новая реализация.
-
[Обязательно] Переопределенные методы из интерфейсов или абстрактных классов должны быть помечены аннотацией @Override. Пример счетчика: для getObject() и get0object() первая буква "O", а вторая цифра "0". Для точного определения успешности переопределения требуется аннотация @Override. В то же время реализующий класс сообщит об ошибке времени компиляции, как только сигнатура метода в абстрактном классе изменится.
-
[Обязательно] На статическое поле или метод следует ссылаться непосредственно по имени его класса, а не по имени соответствующего объекта.
-
[Обязательно] Использование hashCode и equals должно следовать:
- Переопределяет hashCode, если равно переопределено.
- Эти два метода должны быть переопределены для набора, поскольку они используются для предотвращения вставки повторяющихся объектов в набор.
- Если вы используете пользовательские объекты в качестве ключей карты, вы должны переопределить эти два метода. Примечание. Строки можно использовать в качестве ключей для Карт, поскольку эти два метода были переопределены.
Эффект от использования плагина p3c:
Адрес загрузки последней версии Руководства по разработке Java для Alibaba:GitHub.com/alibaba/afraid3from…
адрес гитхаба:GitHub.com/alibaba/afraid3from…
11. Spring Cloud Alibaba
Spring Cloud Alibaba обеспечивает однократное решение для распределенного развития приложений. Он содержит все компоненты, необходимые для разработки распределенных приложений, чтобы вы могли легко разрабатывать приложения, используя облако пружины облака.
С помощью Spring Cloud Alibaba вам нужно всего лишь добавить некоторые аннотации и небольшую настройку для подключения приложений Spring Cloud к распределенным решениям Alibaba и создания распределенных систем приложений с помощью промежуточного программного обеспечения Alibaba.
Основные функции следующие:
-
流量控制和服务降级
: управление потоком для служб HTTP поддерживается по умолчанию. Вы также можете использовать аннотации для настройки правил управления трафиком и снижения качества обслуживания. Правила могут быть изменены динамически. -
服务注册和发现
: службы могут быть зарегистрированы, а клиенты могут использовать управляемые Spring bean-компоненты для автоматической интеграции Ribbon для обнаружения экземпляров. -
分布式配置
: поддерживает внешнюю конфигурацию в распределенных системах и автоматически обновляется при изменении конфигурации. -
事件驱动
: поддержка создания хорошо масштабируемых управляемых событиями микросервисов, подключенных к общим системам обмена сообщениями. -
分布式事务
: поддерживает высокопроизводительные и простые в использовании решения для распределенных транзакций. -
阿里云对象存储
: Массивные, безопасные, недорогие и высоконадежные облачные хранилища. Храните и получайте доступ к любым типам данных в любом приложении, в любое время и в любом месте. -
阿里云SchedulerX
: Точная, надежная и высокодоступная служба планирования заданий по расписанию со временем отклика в несколько секунд. -
阿里云短信
: SMS-сервис, охватывающий весь мир, Ali SMS предоставляет удобные, эффективные и интеллектуальные возможности связи, помогая предприятиям быстро связываться с клиентами.
В основном он включает следующие компоненты:
-
Sentinel
: Используйте трафик в качестве точки входа для защиты стабильности служб от нескольких измерений, таких как управление трафиком, переход на более ранние автоматические выключатели и защита системной нагрузки. -
Nacos
: платформа динамического обнаружения служб, управления конфигурацией и управления службами, упрощающая создание облачных приложений. -
RocketMQ
: Распределенная система обмена сообщениями с открытым исходным кодом, основанная на технологии распределенных кластеров с высокой доступностью, предоставляет услуги публикации сообщений и подписки с низкой задержкой и высокой надежностью. -
Dubbo
: Apache Dubbo™ — это высокопроизводительная платформа Java RPC. -
Seata
: продукт Alibaba с открытым исходным кодом, простое в использовании высокопроизводительное решение для распределенных транзакций с микросервисами. -
Alibaba Cloud OSS
: Alibaba Cloud Object Storage Service (OSS) — это массивная, безопасная, недорогая и высоконадежная облачная служба хранения, предоставляемая Alibaba Cloud. Вы можете хранить и получать доступ к любым типам данных в любом приложении, в любое время и в любом месте. -
Alibaba Cloud SchedulerX
: Распределенный продукт планирования задач, разработанный командой промежуточного программного обеспечения Alibaba, который предоставляет услуги планирования задач второго уровня, точные, высоконадежные и высокодоступные (на основе выражений Cron). -
Alibaba Cloud SMS
: SMS-сервисы, охватывающие весь мир, дружественные, эффективные и интеллектуальные взаимосвязанные коммуникационные возможности помогают предприятиям быстро создавать каналы связи с клиентами.
адрес гитхаба:GitHub.com/Alibaba/SPR…
Настройте зависимости maven:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Для получения более интересного контента, пожалуйста, обратите внимание на мой одноименный публичный аккаунт: Су Сан сказал технологии, в котором есть мои последние статьи.
Добро пожаловать для обсуждения в области комментариев, официальный представитель Nuggets будет вПроект «Звезда раскопок»После мероприятия в комментариях будет разыграно 100 штук Наггетсов, подробности розыгрыша читайте в статье о мероприятии.