автор:vangoleoОфициальный сайт:www.vangoleo.com/iris-java/
задний план
Время летит незаметно, и прошло почти два года с тех пор, как я присоединился к команде промежуточного программного обеспечения Alibaba. В этот период мне посчастливилось принять участие в тематической группе 4-го конкурса Middleware Performance Challenge и подготовить предварительные вопросы на тему «Dubbo Mesh»; методологии и предоставлять услуги разработчикам и предприятиям через коммерческие продукты Alibaba Cloud. Мне очень повезло получить такой незабываемый опыт. Оглядываясь назад, возможность присоединиться к команде промежуточного программного обеспечения как-то связана с моим первоначальным проектом на Github. Поделитесь этим проектом с вами сегодня.
Вопрос: Что такое команда промежуточного программного обеспечения? О: Отдел технологий промежуточного программного обеспечения Alibaba является одной из ведущих команд в области технологий Java в мире.Он возник из группы архитектуры платформы Taobao.Это техническая команда, выросшая вместе с бизнесом электронной коммерции Alibaba и Double Eleven.Рост бизнеса, высокий пики параллелизма и бесконечные проблемы со стабильностью. Продукты включают высокораспределенную инфраструктуру службы RPC, высоконадежное промежуточное ПО распределенных сообщений, распределенный уровень данных, массивное хранилище данных, вычисления в реальном времени, оптимизацию производительности системы, высокую доступность архитектуры и другие продукты в нескольких основных областях. - транзакционные бизнес-системы Группы (Taobao, Tmall, Juhuasuan, 1688, Cainiao) успешно выдержали вызов 91,7 миллиарда транзакций на Double Eleven. Наши компоненты промежуточного программного обеспечения с открытым исходным кодом Dubbo, Rocketmq, Nacos, tengine, Seata и т. д. используются многими предприятиями и частными лицами.
Приглашение от промежуточного ПО
В 2017 году я возглавил команду по рефакторингу серверной архитектуры для микросервисов. При выборе использовался фреймворк Dubbo. Благодаря высокой производительности, простоте использования и высокой масштабируемости Dubbo трансформация микросервисов прошла гладко, а бизнес компании стал все более и более стабильным. Я также проявил большой интерес к Dubbo, надеясь узнать больше об этой превосходной среде RPC. Я изучил исходный код Dubbo и написал мини-версию Dubbo с нуля. В то же время Али перезапустил проект Dubbo и стал инкубационным проектом Apache (на момент написания текста он официально был проектом Apache). На новом официальном сайте Dubbo есть страница «Разыскивается: кто использует dubbo», и я также оставил свою информацию, чтобы поставить лайк Dubbo. Он содержит адрес проекта мини-версии Dubbo.
На самом деле, это был очень случайный ход, и я не ожидал, что произойдет предыстория. Через час мне пришло письмо:Это электронное письмо от главы команды промежуточного программного обеспечения Dubbo. В то время я был удивлен и счастлив. Команда промежуточного программного обеспечения всегда была командой, которую я считаю очень технической и влиятельной, и это была бы прекрасная возможность присоединиться к команде.Итак, следующий шаг — рутинная подача резюме и процесс собеседования. Чтобы пожаловаться на процесс собеседования Али, потребовалось почти два месяца до и после, а всего раундов было пять.Это была действительно затяжная битва. Во время интервью интервьюер задал несколько вопросов о мини-Dubbo. Результат оказался неплохим, мне посчастливилось пройти собеседование и официально присоединиться к команде связующего ПО Dubbo. Позже я услышал от своего босса, что меня пригласили на собеседование, потому что я заинтересовался своим мини-проектом Dubbo.iris
Адрес проекта мини-версии Dubbo:GitHub.com/VA NGO Leo/IR…. Я назвал его ирисом.
iris — это легкий механизм микроядра и плагинов, основанный на Java RPC-фреймворк. Обеспечивает регистрацию службы, обнаружение, балансировку нагрузки, поддержку вызовов API, интеграцию Spring и использование начального уровня Spring Boot.
Имеет следующие особенности:
- Сетевое соединение: Netty4.
- Реестр: расширяемый, etcd уже поддерживается.
- Динамический прокси: byte-buddy.
- Сериализация: Protobuff(Протоштуф).
- Вы можете избавиться от Spring и предоставить вызовы API. Реализовал контейнер IoC самостоятельно.
- Интегрируйте Spring, предоставьте XML, конфигурацию Java.
- Обеспечьте Spring Boot Starter (Dubbo официально не поддерживает Spring Boot Starter, когда этот проект разрабатывается).
- Обеспечьте механизм SPI для реализации архитектуры микроядра плюс подключаемый модуль. Для достижения расширяемости разработчики могут разрабатывать компоненты для радужной оболочки и интегрировать их в радужную оболочку в виде подключаемых модулей. Плагины загружаются с использованием другого фреймворка микроконтейнеров, см. проект coco. Проект разветвлен на cooma Али.
Описание: iris - это проект, который я изучаю лично. Хоть воробей и маленький, но он имеет все внутренние органы и охватывает основные функции фреймворка RPC. Он просто идет от 0 до 1, но от 1 до 100 нужно сделать гораздо больше.
как пользоваться
iris поддерживает следующие варианты использования:
- Собственная форма API не зависит от Spring, и также можно использовать проекты, отличные от Spring.
- Метод конфигурации Spring хорошо интегрирован со Spring.
- Метод конфигурации Spring Boot обеспечивает автоматическую настройку и быстрый запуск Spring Boot Starter.
Использование API
Основной код Iris не зависит от Spring и может использоваться без Spring.
первый шаг: запустить реестр etcd
Написать интерфейс IHelloService
public interface IHelloService {
String hello(String name);
}
второй шаг: Напишите реализацию IHelloService.
public class HelloService implements IHelloService {
@Override
public String hello(String name){
return "Hello, " + name;
}
}
третий шаг: запустить сервер
IRegistry registry = new EtcdRegistry("http://127.0.0.1:2379");
RpcServer server = new RpcServer(registry)
.port(2017)
.exposeService(IHelloService.class,new HelloService());
server.run();
четвертый шаг: Запустить клиент
RpcClient client = new RpcClient(registry);
IHelloService helloService = client.create(IHelloService.class);
String s = helloService.hello("leo");
System.out.println(s); // hello, leo
пятый шаг: попробуйте остановить сервер
Поскольку у службы нет поставщика, клиент сообщает об ошибке, что поставщик не может быть найден.
Шаг 6: запустить сервер
После того, как сервер запустится, он отправится в реестр etcd для регистрации службы, и клиент сразу заработает нормально.
Конфигурация пружины
первый шаг: написать поставщику услуг Поставщик службы использует пользовательскую аннотацию @Service для предоставления службы и указывает интерфейс службы через interfaceClass. Аннотация @Service предоставляется iris, а не аннотацией Spring.
@Service(interfaceClass = IHelloService.class)
public class HelloService implements IHelloService {
@Override
public String hello(String name) throws Exception {
return "hello" + name;
}
}
второй шаг: Написать потребителя услуг Потребители услуг обращаются к удаленным службам через @Reference, как и при использовании локального SpringBean. Инкапсуляция SpringBean и вызовы Rpc, стоящие за ней, прозрачны для разработчика. Опыт тот же, что и в Dubbo.
public class Baz {
@Reference(interfaceClass = IHelloService.class)
private IHelloService helloService;
public void hello(String name) throws Exception {
System.out.println(helloService.hello(name));
}
}
третий шаг: Настройка Spring Beans Настройте поставщика услуг.В этом примере используется конфигурация XML, но также возможно использовать конфигурацию кода Java.
<bean id="registry" class="com.leibangzhu.iris.registry.EtcdRegistry">
<constructor-arg name="registryAddress" value="http://127.0.0.1:2379"></constructor-arg>
</bean>
<bean id="server" class="com.leibangzhu.iris.server.RpcServer">
<constructor-arg name="registry" ref="registry"></constructor-arg>
</bean>
<bean id="serviceAnnotationBeanPostProcessor" class="com.leibangzhu.iris.spring.ServiceAnnotationBeanPostProcessor"></bean>
<bean id="helloService" class="com.leibangzhu.iris.spring.HelloService"></bean>
четвертый шаг: Настройка потребителя службы.В этом примере используется конфигурация XML, а также может использоваться конфигурация кода Java.
<bean id="registry" class="com.leibangzhu.iris.registry.EtcdRegistry">
<constructor-arg name="registryAddress" value="http://127.0.0.1:2379"></constructor-arg>
</bean>
<bean id="client" class="com.leibangzhu.iris.client.RpcClient">
<constructor-arg name="registry" ref="registry"></constructor-arg>
</bean>
<bean id="referenceAnnotationBeanPostProcessor" class="com.leibangzhu.iris.spring.ReferenceAnnotationBeanPostProcessor"></bean>
<bean id="foo" class="com.leibangzhu.iris.spring.Baz"></bean>
Конфигурация весенней загрузки
Использование собственной конфигурации Spring все еще немного громоздко, вы можете использовать Spring Boot, чтобы получить лучший опыт разработки.первый шаг: написать поставщику услуг
@Service(interfaceClass = IHelloService.class)
public class HelloService implements IHelloService {
@Override
public String hello(String name) throws Exception {
return "Hello, " + name + ", from com.leibangzhu.iris.springboot.HelloService";
}
}
второй шаг: Написать потребителя услуг
@Component
public class Foo {
@Reference(interfaceClass = IHelloService.class)
private IHelloService helloService;
public String hello(String name) throws Exception {
return helloService.hello(name);
}
}
третий шаг: настроить поставщика услуг в файле application.properties.
iris.registry.address=http://127.0.0.1:2379
iris.server.enable=true
iris.server.port=2017
iris.annotation.package=com.leibangzhu.iris.springboot
четвертый шаг: настроить потребителя службы в файле application.properties.
iris.registry.address=http://127.0.0.1:2379
iris.client.enable=true
При использовании SpringBoot не разрешается вручную настраивать связанные компоненты Spring, Стартер загрузки Spring, предоставленный Iris, автоматически настроит эти компоненты Spring.
почему имя ирис
iris
Назван в честь картины Ван Гога с изображением ирисов. Я сама люблю рисовать, а Ван Гог — мой любимый художник, поэтому я назвала проект в честь ирисов Ван Гога.
Почему вам нравится Ван Гог? На самом деле меня привлек не художник Ван Гог, а набожный, добрый и фанатичный христианин Ван Гог. Цитата круга моих друзей много лет назад:
Я слушаю биографию Ван Гога каждый вечер перед сном. На самом деле, я не знал Ван Гога раньше, я рад услышать этот отрывок из биографии Ван Гога, написанный Учителем Цзян Сюнем, и я могу понять такую прекрасную жизнь. Ван Гог при жизни продал только одну картину, и то по очень низкой цене, но после его смерти его картины стали величайшими произведениями искусства. Почему подсолнухи Ван Гога горят так сильно, многие говорят, что это из-за его любви к искусству, а некоторые даже говорят, что это из-за инвалидности Ван Гога по зрению. Не так. В его короткой жизни 37 лет его идентичность как художника была только последними годами его жизни 4. Более важная роль Ван Гога в его жизни была ролью набожного и фанатичного христианина. Винсент Ван Гог был бельгийским шахтером. Столкнувшись с группой оборванных и тощих шахтеров, Ван Гог казался неловким. Как христианин, он не должен видеть такую группу людей и ничего не делать. Как христианин, он должен наблюдать. страдание человеческого мира, а затем быть в состоянии вынести его, это называется искуплением. Разве Иисус не пришел в мир из-за искупления, разве Иисус не был распят на кресте из-за искупления? Если не видно искупительной части жизни, в чем смысл существования Иисуса Христа? Он снял свой великолепный черный халат, снял белый шарф, взял лопату и пошел с ними в шахту. Потому что перед лицом такой группы людей роскошные проповеди никак не могут им помочь, только по-настоящему прочувствовав их жизнь, мы можем помочь и искупить этих бедных людей. Ван Гог также разобрал стулья церкви, чтобы разместить горняков, пострадавших в результате аварии на шахте, и отдал горнякам всю свою еду.Такой верующий с глубокой гуманитарной заботой получил письмо об увольнении из церкви.Церковь считает, что священник должен был носить роскошную черную мантию и говорить очень высокопарным проповедническим языком, Ван Гог не отстаивал достоинство церкви. Это был самый большой удар, который Ван Гог когда-либо получал в своей жизни. Когда Ван Гог был на грани отчаяния, именно искусство и живопись спасли его. Какой кистью можно так тепло нарисовать подсолнухи Эла, и какие душевные терзания заставят его отрезать себе уши... О чем свидетельствуют столь многочисленные автопортреты Ван Гога? Какую жизнь он может создать звездной ночью, величайшим произведением своей жизни, в психиатрической больнице, в бараке, где его заточили. Предсказала ли последняя картина Ван Гога ворону на пшеничном поле конец его жизни? Это жизнь человека по имени Винсент-Уильям-Ван Гог.
мой аккаунт на гитхабе
vangoleo
На самом деле этоvangogh(梵高)
+leo(我的英文名)
Комбинация.
Наконец, я прикрепил несколько своих фотографий, не знаю, узнаете ли вы их ^_^
Эта статья написанаwww.vangoleo.comвыпуск