Поделитесь личным проектом, который привел меня к промежуточному программному обеспечению Ali

Dubbo

автор: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(我的英文名)Комбинация.

Наконец, я прикрепил несколько своих фотографий, не знаю, узнаете ли вы их ^_^

leehom

全职猎人

全职猎人

follow me

Эта статья написанаwww.vangoleo.comвыпуск