大型网站架构之优酷篇

首先列出了网站架构关注的一些要点,包括:

  • 在线升级
  • 效率
  • 核心简单
  • 独立性
  • 模块化


再播报一组优酷的数据:

  • 用户数:4000万
  • 视频数:2000万
  • PV:1.3亿
  • VV:1.6亿


主要采用的也都是一些非常常见,成熟的软件和操作系统
包括:centos/LVS/PHP

采用简单的方式对URL进行规划:
http://domain/modules/method/params/

举例:
http://www.youku.com/playlist_showlist/t2d1c123.html  资讯频道的豆单列表页面
http://www.youku.com/playlist_show/id_3219807.html    某个豆单的浏览页面
http://v.youku.com/v_playlist/f3220308o1p0.html    豆单中某个视频的播放页面


优酷每周规定周二固定时间进行发布(这样可以简化一些发布上线的流程)
通过自建的CMS解决了大部分的页面的内容维护和生成的问题。

缓存的设计

缓存黄金原则:让数据更靠近 CPU

CPU-->CPU 一级缓存-->二级缓存-->内存-->硬盘-->LAN-->WAN

讲到了 Youku 自己的内部项目,针对大文件缓存的。
目前开源软件中,Squid 的 write() 用户进程空间有消耗,(这个需要看源码才能看到)
Lighttpd1.5 的 AIO(异步I/O) 读取文件到用户内存导致效率也比较低下。
Youku不用内存做缓存(避免内存拷贝,避免内存锁)。(优酷应该也用了不少memcached)
值得注意的是,缓存技术容易被滥用,也有副作用,比如接到老大通知要把某个视频撤下来,如果在缓存里是比较麻烦的。

 

MySQL数据库的优化


曾经也考虑过使用数据库中间层来解决数据库的问题,但是考虑的方案比较复杂不够简单,所以放弃。(简单最重要)


数据库采用水平扩展,主从复制,随着从数据库的增多,复制延迟越来越厉害,最终无法忍受。

最终还是采用数据库的sharding,把一组用户相关的表和数据放到一组数据库上。

使用SSD来优化mysql的I/O,性能提升明显,每块16G,6块SSD做RAID。

数据库的类型选用MYISAM

数据库的拆分策略,先纵向按照业务或者模块拆分。对于一些特别大的表,再采用垂直拆分

根据用户进行分片,尽可能不要跨篇查询。如果确实要跨片查询,可以考虑搜索的方案,先索引再搜索。

分布式的数据库方案太复杂,否掉。

网络服务器优化

如果要优化服务器的性能,必须对Libevent 非常熟悉,因为常见的memcached/squid/lighttpd等都有用到。确实很重要。

libevent封装了epoll/kqueue

视频的去重方案:md5和视频指纹。

关键的业务要自己来做。

### 如何在 Windows 系统中安装 PythonQt Designer 并配置环境 #### 安装 PyQt6 和 Qt Designer 为了在 Windows 上使用 Qt Designer,可以通过 `pip` 命令安装最新的 PyQt6 模块。PyQt6 是一个用于创建图形用户界面 (GUI) 应用程序的工具包,并附带了 Qt Designer 工具。 运行以下命令可以完成 PyQt6 及其相关组件的安装: ```bash pip install pyqt6-tools ``` 此命令会自动下载并安装必要的依赖项,其中包括 Qt Designer[^1]。 #### 配置路径以便访问 Qt Designer 安装完成后,通常可以在以下目录找到 Qt Designer 文件(具体位置取决于 Python 解释器的位置): - **对于标准安装**:`C:\Users\<用户名>\AppData\Local\Programs\Python\<版本号>\Lib\site-packages\pyqt6_tools` - 或者通过脚本启动:`python -m pyqt6_designer`. 如果希望直接从文件资源管理器或桌面快捷方式打开 Qt Designer,则需将其可执行文件所在路径添加到系统的环境变量 PATH 中。操作方法如下: 1. 打开控制面板 -> 系统和安全 -> 系统 -> 高级系统设置。 2. 单击“环境变量”,在“系统变量”部分找到名为 “Path”的条目并编辑它。 3. 添加上述提到的设计工具所在的完整路径至列表末尾。 这样处理之后,在任意 CMD 终端窗口输入 designer.exe 就能调用该应用程序。 #### 测试安装成功与否 验证是否正确设置了所有内容的一个简单办法就是尝试加载设计模式本身或者利用 PyQT 创建一个小项目来看看能否正常渲染 UI 元素。下面给出一段简单的例子展示如何载入由设计师保存下来的 .ui 文件并通过 python 运行起来: ```python from PyQt6 import uic import sys from PyQt6.QtWidgets import QApplication, QMainWindow class MyUI(QMainWindow): def __init__(self): super(MyUI,self).__init__() # 加载 ui 文件 uic.loadUi('your_ui_file.ui', self) if __name__ == '__main__': app = QApplication(sys.argv) window = MyUI() window.show() try: sys.exit(app.exec()) except SystemExit: pass ``` 以上代码片段假设存在一个叫做 'your_ui_file.ui' 的文件位于当前工作目录下,它是之前通过 Qt Designer 构建出来的界面布局定义文档。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值