Maison > Java > javaDidacticiel > La route de l'architecte Java - technologie limite actuelle et divers langages de programmation

La route de l'architecte Java - technologie limite actuelle et divers langages de programmation

巴扎黑
Libérer: 2017-06-26 11:48:44
original
2002 Les gens l'ont consulté

Les langages de programmation actuellement sur le marché sont principalement orientés objet. L'orientation objet doit commencer par certaines des choses les plus élémentaires. Par exemple, je me suis marié à l'âge de 24 ans, sinon comment pourrais-je faire de la programmation orientée objet. Et puis vous avez un bébé juste après votre mariage. Et si le partenaire s'enfuit ? Si la création et la destruction coûtent cher, mieux vaut avoir un enfant et continuer à détenir une référence à l’objet.

Pourquoi certaines personnes parlent longtemps alors que d'autres ne parlent que de temps en temps ? D'après mon observation, deux personnes qui travaillent presque aussi bien se développeront mieux à l'avenir. Ressentons les raisons à partir d’exemples spécifiques.

Lorsque vous discutez avec des amis, Renren, sorti il ​​y a quelques années, a toujours un esprit un peu geek technique. Parlons de technologie. Les gens me demandent comment vos vidéos sont stockées et lues. J'ai dit que je ne travaille que sur le contenu et la méta, et que le reste n'a rien à voir avec moi. Tian'er a bavardé à mort et son modèle s'est mis en place. S'il existe une plateforme de développement pour ce que je fais, elle inclut la mise en ligne de vidéos. Appelez d’abord l’interface de stockage cloud pour l’initialisation, et ils nous renvoient une URL de téléchargement de média vidéo. Le côté JS télécharge des fragments multimédias vers l'URL. Si le réseau est interrompu ou le navigateur est fermé, vous pouvez appeler l'interface de reprise pour poursuivre la transmission en utilisant l'URL nouvellement renvoyée. L'interface de reprise du transfert contient la taille totale du fichier et la taille des fichiers reçus jusqu'à présent. JS peut l'utiliser pour déterminer à partir de quel fragment poursuivre le transfert. Le stockage cloud relève d'un autre département. Ils sont responsables de la communication avec le service de transcodage cloud. Le transcodage cloud convertit les médias en différents formats. Quant à la conversion des fichiers haute définition originaux en différents débits binaires, comment se fait l'échantillonnage et la gestion des droits numériques DRM. Comment procéder relève de la responsabilité du service de transcodage cloud. Quelles stratégies utilisent-ils en interne pour les distribuer aux différents nœuds DNS ? Comment le service de planification planifie pour économiser la bande passante la plus précieuse du site Web vidéo, je ne suis pas très clair sur les détails spécifiques. Le service de transcodage cloud nous transmet les débits binaires convertis et les URL vidéo sous forme de MQ, et nous les stockons dans la base de données.

Puis ils ont demandé à nouveau : qu'utilisez-vous pour MQ ? Je parle du qpidd d'Apache. Euh~~, si les gens ne le savent pas, la conversation sera ennuyeuse. Il faut donc dire que MQ est similaire, et comme Rabbit MQ, il est basé sur le protocole avancé de file d'attente de messages AMQP. Il s'agit du cluster unifié de l'entreprise, et il est considéré comme très pratique à installer et à déployer. Les langages de programmation grand public le prennent également en charge, je l'utilise donc. Parce qu'il s'agit principalement d'une communication interservices, c'est principalement pour des raisons de commodité et de réduction des coûts de communication, donc le corps de notre message est d'abord compressé en json, puis en base64. Nous n'utilisons pas non plus les binaires de protobuf, car si nous rencontrons un problème, le binaire est peu lisible, manque d'auto-description et n'est pas facile à dépanner.

Les services à haute concurrence doivent avoir certains plans d'urgence, tels que l'interruption de service, la dégradation, l'isolement, la limitation de courant, le RPC asynchrone, etc. Pour l’interruption, le déclassement et l’isolation du service, tout le monde préfère utiliser Hystrix, le cadre d’élasticité des services distribués open source de Netflix. Hystrix peut également limiter le trafic. Mais notre service utilise RateLimiter de Guava, un algorithme de compartiment de jetons mature, pour l'implémenter.

La limitation des services est une question très simple. Notre code ne comporte que quelques centaines de lignes, mais il contient un ensemble relativement complet d'idées de conception. Le but est de mettre en œuvre une limitation fine du courant métier basée sur certaines stratégies (telles que l'URL, la source de la plate-forme, l'URL + la source de la plate-forme).

 

Toutes les requêtes doivent passer par cet intercepteur. Cet intercepteur définit une seule instance de détenteur de limite actuelle. Ce détenteur de limite actuelle est configuré en fonction de la configuration. La politique et la limite configurée pour chaque ou chaque requête sont renvoyées à l'intercepteur demandant la clé et le RateLimiter correspondants. Si l'intercepteur détermine que la limite est dépassée, une erreur sera renvoyée directement sans être transmise au contrôleur pour traitement. Un type de requête, tel qu'une URL, un RateLimiter pour une limitation de débit à granularité fine.

Bien entendu, en plus de cette limite actuelle au niveau de l'application, certaines restrictions sur l'espace de session IP, la fréquence des requêtes et la concurrence peuvent également être implémentées au niveau nginx. Si vous rencontrez une attaque réseau, essayez d'abord de résoudre le problème au niveau de l'exploitation et de la maintenance, car plus le niveau est élevé, l'impact sur les services peut être minimisé.

Une bonne architecture logicielle peut garantir la qualité du système, permettre aux bénéficiaires d'atteindre des objectifs cohérents, soutenir le processus de planification, fournir des conseils pour le développement du système, gérer efficacement la complexité et jeter les bases de la réutilisation. peut réduire les coûts de maintenance et prendre en charge l’analyse des conflits.

La plupart des architectures ou langages de programmation sont issus de projets. Par exemple, Stroustrup, l'inventeur du C++, a initialement conçu ce langage parce qu'il a constaté que le langage C provoquait des problèmes de programmation critiques en raison de paramètres d'initialisation déraisonnables. De tels bogues sont difficiles à trouver. Ce problème se produit également lors du nettoyage. Si vous le faites et persistez, vous réussirez effectivement. Cependant, tout a une étape de formation et de développement. Java s'est plaint de problèmes de performances dans les anciennes versions, et chaque version de Java est accompagnée d'améliorations de performances, donc la mise à niveau de la JVM peut apporter des avantages gratuits en termes de performances. Le mot-clé final vient à l'esprit lorsqu'il s'agit de détails. Dans les premières versions, la partie du mot-clé final était appelée en ligne, développant directement la fonction sans avoir besoin de pousser et d'insérer constamment des paramètres dans et hors de la pile, ce qui serait le cas. entraîner une surcharge de performances. Mais cela entraînera une surcharge d’espace relativement importante lorsque le corps de la fonction est grand. La JVM a été optimisée depuis la 1.5, et le mot-clé final n'est plus si important en termes de performances. Il s'avère qu'il y a un collègue dans l'entreprise qui est très sympathique et qui a de bonnes idées. Il a déclaré : « J'écris toujours certaines de mes idées dans un cahier, puis quand je le regarde après un certain temps, je découvre que je n'ai adhéré qu'à une seule des idées à l'époque, que je l'ai fait et que cela a réussi. "Je pense qu'il est plus loin du succès qu'il ne le pense. Parce qu'il n'avait qu'une idée, mais il ne l'a pas mise en œuvre. Il semble qu'il n'y ait que l'idée de JDK1.0, mais la distance entre le succès et le succès est d'au moins jdk1.5.

Python est célèbre pour sa petite taille de code, son faible coût de maintenance et sa grande efficacité de programmation. Mais combien de langages de programmation ne sont pas optimisés pour de faibles coûts de maintenance et une efficacité de programmation élevée ? Alors les gens m’ont demandé que les moteurs de recherche étaient déjà en flammes. Pouvez-vous vraiment créer vos propres avantages à l’avenir ? Tout ce que je peux dire, c’est comment le saurez-vous si vous n’essayez pas. "La vie est courte, j'utilise python". Ces fonctionnalités de Python peuvent libérer plus de temps pour draguer les filles, mais la vie est trop courte. Les propos publicitaires des auteurs Python donnent de la vitalité à Python. En fait, la simplicité de Python peut être constatée dans son recyclage de mémoire. Il utilise le comptage de références, il n'y a donc pas de problème de référence circulaire. J'ai réalisé un projet Python quand j'étais chez Renren. Il fut un temps où notre chef disait que je faisais seul le travail de huit personnes. En plus de tous les travaux de maintenance sur l'ensemble du site, j'accepte toutes sortes de nouveaux travaux. À cause de cette personnalité, les autres n'ont vraiment aucun moyen de venir vers moi, je ne fais que m'embarrasser, pas les autres. À cette époque, je travaillais depuis moins de quatre ans et je programmais depuis moins de deux ans. J'ai dit que j'avais travaillé comme traductrice japonaise pendant les deux premières années de mon travail. La raison pour laquelle nous pouvons aller vers tout le monde. Un jour, je suis arrivé à Pékin et je visitais le Palais d'été avec mes aînés. Soudain, j'ai reçu un appel de Renren.com. La personne au téléphone m'a posé diverses questions techniques et mes réponses ont toutes été « Non ». L'autre bout du fil était très gentil et a dit que cela n'avait pas d'importance. Finalement, il y avait une intervieweuse à l'autre bout du fil, qui m'a parlé en japonais et m'a demandé ce que j'avais fait. Elle était très satisfaite de ma réponse, elle était principalement satisfaite parce qu'elle trouvait que mon japonais était très bon. En conséquence, je suis devenu ingénieur de ponts chez Renren.com. Je me souviens que dans l'article que j'ai écrit plus tôt, dans mon profil personnel, j'avais dit que j'étais critiqué par les internautes pour mes talents linguistiques. Mais quand j'étais chez Neusoft, tout le monde disait que j'avais des talents linguistiques, et j'avais l'habitude de le penser. . Je l’ai simplement pris pour acquis. Je dis quelque chose et je ne veux pas en faire la publicité. Je ne connais pas Python non plus, et je ne sais même pas ce qu'est une plateforme ouverte. Mais j'ai pris en charge moi-même la maintenance de l'ensemble de la plateforme ouverte car le patron de la plateforme ouverte est parti pour Meituan. Au fait, ce patron est vraiment un gars formidable. Il est venu de l'Université Tsinghua, il est venu à Renren, est allé à Meituan et est devenu P4, et maintenant il crée sa propre entreprise. Un jour, mon petit ami m'a montré une photo de l'Association des anciens élèves de Tsinghua et m'a demandé : « Cette personne est-elle un de vos anciens collègues ? J'ai dit : "Ouais." Il a déclaré : « La personne assise à côté de lui est notre patron. Eh bien, il semble que mon idole masculine ait encore beaucoup à faire.

Je mords la balle et maintiens cette plateforme ouverte. Ensuite, le jeu Bubble Fish sera connecté à une plateforme japonaise. Ce jeu est écrit en python. À cette époque, ce jeu était très populaire. La société de jeux était très occupée et n'avait pas le temps de le connecter, alors ils nous ont payé pour notre aide. Nous ne pouvons que prendre le code et le connecter nous-mêmes. À cette époque, Renren aimait s'engager dans l'entrepreneuriat interne. Nous étions un département commercial à l'étranger et nous ne gagnions pas d'argent. J'ai fait la connexion, et l'équipe de jeu nous a donné 100 000 frais de connexion, et le reste était la part du jeu. Je ne sais pas à combien s'élevaient les revenus. Mais c’était le seul projet rentable pour nous à l’époque. Python est vraiment facile à apprendre. Je gère le site Web pendant la journée, et tout le monde vient me voir la nuit, je fais l'accès, j'étudie Python et j'accède aux documents, et je termine la partie accès au paiement en une semaine. L'environnement de test peut être chargé. Mais il y a eu un problème de mise en ligne lors de l'exécution de l'environnement formel construit par le MM d'exploitation et de maintenance, quelque chose n'allait pas. Tout le monde rentrait chez soi le soir et j'y travaillais moi-même sur l'environnement en ligne. Plus tard, j’ai finalement découvert que la version d’une partie de l’outil installé était erronée, mais je ne me souviens plus des détails. Cela s'est produit il y a 6 ans. J'ai donc fait du python, mais je ne connais pas python.

Il existe un haut mur entre Java et C++, qui est entouré d'une technologie d'allocation dynamique de mémoire et de récupération de place. Les personnes à l'extérieur du mur veulent entrer, mais les personnes à l'intérieur du mur veulent sortir. Vous ne pouvez pas être aussi décontracté en Java, c'est-à-dire optimiser les paramètres d'allocation de mémoire. En parlant d'optimisation des paramètres JVM, en fait, la chose la plus couramment utilisée que tout le monde connaît et ne prend pas au sérieux est de définir le maximum et le minimum initiaux. valeurs du tas à la même valeur, afin d'éviter l'expansion automatique du tas, ajustant la taille de la nouvelle génération et de l'ancienne génération de gc complet causée par la réduction du débit et le retard. On dit que presque toutes les opérations gc de la JVM, y compris les gc mineurs, doivent arrêter le monde

Enfin, je voudrais recommander un site Web étranger à tout le monde. Des outils pratiques et des techniques de réglage sont souvent introduits, en se concentrant sur l'analyse. Les œuvres représentatives incluent et

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal