Maison php教程 php手册 [总结] 【架构与优化】从Facebook中集思广益,相互学习

[总结] 【架构与优化】从Facebook中集思广益,相互学习

Jun 13, 2016 am 09:42 AM
facebook et 优化 学习 总结 架构 ce 问题

本人才学疏浅,提出这个问题只是为了抛砖引玉,希望大家能在自己擅长的领域里对Facebook中可能采用的某个技术或者架构方案或优化方法,做个自己的论述。根据2008年9月1日,腾讯网对Facebook的技术运营副总裁Jonathan Heiliger的访问,我们了解到:
(1)Facebook自称全球流量第四的网站,每天9000万活跃用户访问Facebook的1万台服务器。
(2)25TB数据(08年12月为28TB),40万名外部开发者支持,开发了2.5万套应用软件。
(3)使用LAMP(Linux、 Apache MySQL、 PHP)技术构架;数据库使用MySQL;使用Memcached缓存SQL加速(全球最大的分布式Memcached缓存,800多台服务器,光缓存在Memcached中数据就达20多TB);使用APC进行opcode编译缓存。关于PHP的编译执行如下图所示:

而Facebook的缓存方案如下图所示:


(4)一些后台应用是用Python、Perl和Java,以及一些gcc和Boost。

(5)使用SVN和Git来进行代码管理,并且全部企业内部的软件部署都采用开源程序。


2. 可能会采用的MySQL架构与优化
(1)数据的垂直(无关联数据放置不同数据库服务器)与水平分割(库表散列,如用user_id散列),然后用MySQL Proxy/Spock Proxy进行分割表的反向代理。
(2)合理使用变量,并在本地文件建立散列的映射关系,进一步进行分割。
(3)Master/Slave集群架构,实现读写分离。
(4)合理的数据库结构设计,与索引优化

(5)其他:索引缓存、联合索引、查询缓存等。


3. 可能会采用的系统优化
(1)使用epoll模型
(2)异步I/O
(3)fastcgi或其他方法实现多进程
(4)sendfile系统调用增大网络I/O流量
4. 可能会采用的Web架构或前端技术
(1)Web组件分离,如独立的图片服务器,JavaScript、CSS文件、动态脚本的分离。
(2)Nginx反向代理(或Squid)
(3)多副本负载均衡
(4)HTTP持久连接与合理利用浏览器缓存,例如背景图偏移量技术,及对CSS、JavaScript和视频的
5. 一些可能会用也可能不用的压力测试
(1)Apache的ab进行压力测试
(2)Apache的prefork模式进行多进程切换的压力测试
(3)使用Nginx为多进程下的CPU与IO进行监控

Linux下的Memcached开发,请参看逆雪寒的文章http://bbs.phpchina.com/viewthread.php?tid=48667&highlight=linux%2B%CF%C2%B5%C4%2Bmemcached%2B%BF%AA%B7%A2
Memcached的分布式缓存机制及相关解决方案请阅读以下网址及相关文章:
http://tech.idv2.com/2008/07/24/memcached-004/
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelle est l'architecture et le principe de fonctionnement de Spring Data JPA ? Quelle est l'architecture et le principe de fonctionnement de Spring Data JPA ? Apr 17, 2024 pm 02:48 PM

SpringDataJPA est basé sur l'architecture JPA et interagit avec la base de données via le mappage, l'ORM et la gestion des transactions. Son référentiel fournit des opérations CRUD et les requêtes dérivées simplifient l'accès à la base de données. De plus, il utilise le chargement paresseux pour récupérer les données uniquement lorsque cela est nécessaire, améliorant ainsi les performances.

Quelle est la courbe d'apprentissage de l'architecture du framework Golang ? Quelle est la courbe d'apprentissage de l'architecture du framework Golang ? Jun 05, 2024 pm 06:59 PM

La courbe d'apprentissage de l'architecture du framework Go dépend de la familiarité avec le langage Go et le développement back-end ainsi que de la complexité du framework choisi : une bonne compréhension des bases du langage Go. Il est utile d’avoir une expérience en développement back-end. Les cadres qui diffèrent en complexité entraînent des différences dans les courbes d'apprentissage.

Optimisation des programmes C++ : techniques de réduction de la complexité temporelle Optimisation des programmes C++ : techniques de réduction de la complexité temporelle Jun 01, 2024 am 11:19 AM

La complexité temporelle mesure le temps d'exécution d'un algorithme par rapport à la taille de l'entrée. Les conseils pour réduire la complexité temporelle des programmes C++ incluent : le choix des conteneurs appropriés (tels que vecteur, liste) pour optimiser le stockage et la gestion des données. Utilisez des algorithmes efficaces tels que le tri rapide pour réduire le temps de calcul. Éliminez les opérations multiples pour réduire le double comptage. Utilisez des branches conditionnelles pour éviter les calculs inutiles. Optimisez la recherche linéaire en utilisant des algorithmes plus rapides tels que la recherche binaire.

Déchirage manuel de la couche 1 de Llama3 : implémentation de Llama3 à partir de zéro Déchirage manuel de la couche 1 de Llama3 : implémentation de Llama3 à partir de zéro Jun 01, 2024 pm 05:45 PM

1. Architecture de Llama3 Dans cette série d'articles, nous implémentons Llama3 à partir de zéro. L'architecture globale de Llama3 : Imaginez les paramètres du modèle de Llama3 : Jetons un coup d'œil aux valeurs réelles de ces paramètres dans le modèle Llama3. Image [1] Fenêtre contextuelle (context-window) Lors de l'instanciation de la classe LlaMa, la variable max_seq_len définit la fenêtre contextuelle. Il existe d'autres paramètres dans la classe, mais ce paramètre est le plus directement lié au modèle de transformateur. Le max_seq_len ici est de 8K. Image [2] Vocabulaire-taille et AttentionL

Apprenez la fonction principale du langage Go à partir de zéro Apprenez la fonction principale du langage Go à partir de zéro Mar 27, 2024 pm 05:03 PM

Titre : Apprenez la fonction principale du langage Go à partir de zéro. En tant que langage de programmation simple et efficace, le langage Go est privilégié par les développeurs. Dans le langage Go, la fonction principale est une fonction d'entrée, et chaque programme Go doit contenir la fonction principale comme point d'entrée du programme. Cet article explique comment apprendre la fonction principale du langage Go à partir de zéro et fournit des exemples de code spécifiques. 1. Tout d’abord, nous devons installer l’environnement de développement du langage Go. Vous pouvez aller sur le site officiel (https://golang.org

Revoir! Résumer de manière exhaustive le rôle important des modèles de base dans la promotion de la conduite autonome Revoir! Résumer de manière exhaustive le rôle important des modèles de base dans la promotion de la conduite autonome Jun 11, 2024 pm 05:29 PM

Écrit ci-dessus et compréhension personnelle de l'auteur : Récemment, avec le développement et les percées de la technologie d'apprentissage profond, les modèles de base à grande échelle (Foundation Models) ont obtenu des résultats significatifs dans les domaines du traitement du langage naturel et de la vision par ordinateur. L’application de modèles de base à la conduite autonome présente également de grandes perspectives de développement, susceptibles d’améliorer la compréhension et le raisonnement des scénarios. Grâce à une pré-formation sur un langage riche et des données visuelles, le modèle de base peut comprendre et interpréter divers éléments des scénarios de conduite autonome et effectuer un raisonnement, fournissant ainsi un langage et des commandes d'action pour piloter la prise de décision et la planification. Le modèle de base peut être constitué de données enrichies d'une compréhension du scénario de conduite afin de fournir les rares caractéristiques réalisables dans les distributions à longue traîne qui sont peu susceptibles d'être rencontrées lors d'une conduite de routine et d'une collecte de données.

Comment optimiser les éléments de démarrage du système WIN7 Comment optimiser les éléments de démarrage du système WIN7 Mar 26, 2024 pm 06:20 PM

1. Appuyez sur la combinaison de touches (touche Win + R) sur le bureau pour ouvrir la fenêtre d'exécution, puis entrez [regedit] et appuyez sur Entrée pour confirmer. 2. Après avoir ouvert l'éditeur de registre, nous cliquons pour développer [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer], puis voyons s'il y a un élément Sérialiser dans le répertoire. Sinon, nous pouvons cliquer avec le bouton droit sur Explorateur, créer un nouvel élément et le nommer Sérialiser. 3. Cliquez ensuite sur Sérialiser, puis cliquez avec le bouton droit sur l'espace vide dans le volet de droite, créez une nouvelle valeur de bit DWORD (32) et nommez-la Étoile.

'Black Myth: Wukong ' modifié par magie pour vaincre Midjourney. Cet outil de dessin IA est incroyable. 'Black Myth: Wukong ' modifié par magie pour vaincre Midjourney. Cet outil de dessin IA est incroyable. Aug 23, 2024 pm 09:42 PM

Lorsque les idéogrammes IA rivalisent pour le réalisme et le sens artistique, Ideogram a ouvert une voie délicate : il peut générer avec précision du texte sur des images, et les polices et mises en page sont magnifiques. Cette demande n'est pas une niche. Générez des affiches et des illustrations en un seul clic sans utiliser d'images P. Cela peut éviter bien des problèmes et convient très bien aux gens ordinaires qui ne connaissent rien au design. Nous avons déjà parlé de la version 1.0 d'Ideogram. Le 21 août, la version 2.0 est arrivée. Le réalisme est meilleur, les affiches sont plus conçues et la compétence particulière du texte est également plus forte. Vous n'en avez peut-être jamais entendu parler. Il s'agit d'un produit d'IA développé par d'anciens employés de Google. Il présente de nombreux défauts, mais le longboard peut « dépasser » Midjourney dans les virages. Itinéraire https://ideogram.ai/A

See all articles