
Il y a quelque temps, j'ai parlé de notre expérience dans la résolution de problèmes complexes à l'aide d'Elasticsearch. C'était une
histoire de saucisse , où nous avons développé une recherche dans une base de données d'au moins 50 000 documents, qui vous permet de rechercher des ingrédients dans les produits et de générer automatiquement des descriptions de produits à partir d'eux.
Récemment, un projet intéressant est venu dans notre entreprise qui a nécessité l'utilisation d'Elasticsearch. Cette fois, nous avons été confrontés à la tâche de déployer ES pour travailler dans l'application sur la plateforme cloud chinoise Alibaba Cloud. Ici, en plus des problèmes techniques, nous sommes tombés sur une chose aussi inattendue que la mentalité chinoise.
Cet article se concentrera uniquement sur notre expérience personnelle avec Alibaba Cloud, et non sur l'interface ou les options standard. Je vais vous dire ce que j'ai réussi à découvrir en communication avec des représentants des plates-formes Elasticsearch et Alibaba Cloud, et comment nous l'avons utilisé pour résoudre notre problème.
Swing to China
Au début du projet, le client a annoncé que le premier lancement de l'application se fera en Chine. Cela a grandement compliqué la tâche: la loi chinoise gêne beaucoup les développeurs et les propriétaires de sites Web. La simple réception d'un domaine en raison de la bureaucratie locale dure trois mois. Mais que faire si vous hébergez une application en dehors de la Chine? - demandez-vous. Et en réponse, je vous souhaite bonne chance avec le lancement dans la zone chinoise, car de telles astuces y sont pratiquement illégales.
On nous a donné accès au serveur client sur Alibaba Cloud et on nous a demandé de déployer des conteneurs Docker avec l'application dessus. Ce fut le premier, mais pas le principal problème. Nous avons transmis les accès du conteneur au système de fichiers afin d'avoir accès aux fichiers du projet au niveau du serveur, et ici le problème était que sur le serveur lui-même il n'y avait rien d'autre que docker: ni git, ni nginx, ni php. Tout a été fait au niveau du conteneur et le serveur n'était qu'un entrepôt de données. Par conséquent, un simple pull git s'est transformé en ce qui suit:
docker exec -it b33aee747c5e git pull
Pour cette raison, nous avons dû écrire un script bash pour chaque conteneur, par exemple, avec le nom git:
docker exec -it b33aee747c5e git $@
De plus, l'aventure est devenue plus compliquée: nous avons dû en quelque sorte installer l'ES. Grâce à la console de gestion d'Alibaba Cloud, nous avons installé l'image Elasticsearch 6.0.0 et ...
... Et après un certain temps, ils ont commencé à détecter des erreurs. Soit le système de contrôle d'accès X-Pack commencera à «jurer» qu'après 28 jours, la licence expire, alors la RAM se terminera lorsque quelque 500 documents seront indexés. Pas "monté en flèche".
Problèmes de Laovai
Pendant tout ce temps, nous pensions que la raison de l'échec était le X-Pack, que c'était lui qui nous empêchait de travailler normalement.
"Eh bien, que pouvons-nous faire", a déclaré le client, après avoir écouté notre version. - Donc, nous allons acheter une licence X-Pack. Écrivez à Elasticsearch, peut-être qu'ils conseilleront eux-mêmes quelque chose. " J'ai écrit au service des comptes et le consultant du bureau néerlandais, Driton Khalili, m'a répondu (si vous travaillez avec lui, dites-moi bonjour, il est cool). Oui, l'Europe de l'Est et la Russie ont un bureau néerlandais en charge, où les Turcs travaillent.
Le consultant m'a parlé du système de paiement des licences X-Pack et m'a demandé où nous hébergeons.
En Chine, j'ai répondu.
"C'est un problème", a-t-il déclaré. - Votre client doit écrire à notre succursale chinoise pour l'aider à résoudre ce problème.
- Y a-t-il d'autres options? Ai-je demandé.
- Essayez de contacter Alibaba Cloud. Le fait est que nous avons récemment conclu un accord de partenariat avec eux, et maintenant ils fournissent Elasticsearch en tant que service.
«Nous les hébergeons donc», ai-je dit.
- Alors pourquoi êtes-vous tourmenté avec le contenant au lieu d'en prendre directement?!
Ayant terminé la conversation, j'ai raconté tout cela au client.
- Je veux dire - Alibaba a-t-il Elasticsearch en tant que service?! - l'indignation du client ne connaît pas de limites. Après cela, il est allé parler aux «collègues chinois», et le lendemain, il a dit ce qui suit:
- Ces gens ont dit que j'étais «aimante», et sur mon compte «aimante», je n'étais pas censé avoir Elasticsearch.
Il n'est pas difficile de deviner que les Laoviens appellent les étrangers les Chinois, utilisant souvent ce mot avec une connotation dédaigneuse. On peut dire que ce sont les Chinois "venus en grand nombre".
- Ils y ont bu plus, ou quoi?
- Je ne connais pas puer, mais après mon discours inspirant qu'ils se trompent un peu et pour lesquels je leur paie du tout, ils m'ont donné un lien "secret" vers Elasticsearch, qui sera maintenant affiché dans notre console cloud. Installez-vous et nous déménagerons.
Que faire pour "décoller"
Trois semaines plus tard, un lien vers Alibaba Cloud Elasticsearch est apparu dans le menu de la console de contrĂ´le (dans la section DTplus, tout en bas).

De cela, nous pouvons conclure que si les Chinois vous donnent néanmoins un lien, vous devrez attendre l'accès pendant un certain temps (je ne peux pas dire avec certitude sur le prix, à mon avis, cela n'a pas augmenté le coût de l'abonnement pour nous).
Et encore une chose: bien sûr, vous aurez accès aux paramètres, une URL normale, Kibana pour la surveillance. Ce n'est que lorsque vous essayez d'atteindre ES depuis un autre endroit que vous obtenez 505.
Comment ai-je résolu ce problème?
Par défaut, Elasticsearch d'Alibaba Cloud Console est accessible uniquement à partir de Kibana et les appels proxy de celui-ci vers 127.0.0.1 à l'intérieur du serveur sur lequel ES se trouve. Alors j'ai pensé: quelles sont les adresses IP que nous avons à l'intérieur entre les conteneurs? Je suis entré dans les paramètres et j'ai vu que nous tournions tous dans un sous-réseau assez familier 192.168.0. *. Je n'étais pas complètement sûr, alors je me suis écrit quelques adresses de plus au cas où je ne "volerais pas".
J'ai également pensé à ce qui se passerait si j'avais moi-même besoin d'envoyer des demandes à ES depuis mon poste de travail, j'ai donc également noté mon adresse IP sur un morceau de papier.
Ensuite, procédez comme suit.
Accédez à la console Alibaba Cloud, ouvrez Cluster -> Gérer -> Réseau et instantanés -> Section Paramètres réseau du cluster -> Liste blanche d'adresses IP publiques -> Mettre à jour. Et nous sauvegardons ici toutes les adresses utiles - personnelles et publiques. Après cela, vous pouvez déjà travailler et frapper ES à la fois à partir des conteneurs avec l'application et à partir d'autres endroits.

Le déménagement a pris moins de deux heures. Certes, pendant une autre semaine, j'étais paranoïaque au sujet du fait que tout pouvait tomber, mais jusqu'à présent, rien n'est tombé. Depuis trois mois maintenant, il n'est jamais tombé.
Au total, nous avons passé environ trois semaines à essayer de résoudre un problème qui n'existe pas. C'est juste que les Chinois sont très rusés et ne veulent donner accès à leurs services à aucun "laov". Pour une personne avec notre mentalité ou occidentale, c'est étrange, cependant, nous avons traité ce problème, et ce fut une expérience plutôt intéressante.
Merci de votre attention!