下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 .平台优化方案大型网站,在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的We密器。但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。上面提供的几个解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。1.1. HTML静态化由于效率最高、消耗最小的就是纯静态化的html页面,所以尽可能使网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,无法全
2、部手动去挨个实现,于是出现了常见的信息发布系统CMS信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMSI必不可少的。除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,如Mop勺大杂除就是使用了这样的策略,网易社区等也是如此。同时,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现,比如论
3、坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储在数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。1.2. 图片服务器分离对于We服务器来说,不管是ApacheIIS还是其他容器,图片是最消耗资源的,于是有必要将图片与页面进行分离,这是基本上大型网站都会采用的策略,他们都有独立的图片服务器,甚至很多台图片服务器。这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片问题而崩溃,在应用服务器和图片服务器上,可以进行不同的配置优化,比如apache在配置C
4、ontentType的时候可以尽量少支持,尽可能少的LoadModule,保证更高的系统消耗和执行效率。1.3. CPU与IO均衡在一个网站提供的所有功能中,有的功能可能需要消耗大量的服务器端IO资源,像下载,视频播放等,而有的功能则可能需要消耗大量的服务器CP贫源,像视频格式转换,LOGE计等。在一个服务器集群中,当发现某些机器上CP由PIO的利用率相差很大的时候,例如CP收载很高而IO负责很低,可以考虑将该服务器上的某些耗CPU?源的进程换成耗IO的进程,以达到均衡的目的。均衡每一台机器的CPUDIO消耗,不仅可以获得更充分的服务器资源利用,而且还能够支持暂时的过载,遇到突发事件,访问流量
5、剧增的时候,实现得体的性能下降(Gracefulperformancedegradation),而不是立即崩溃。1.4. 读写分离如果网站的硬盘读写性能是整个网站性能提升的一个瓶颈的话,可以考虑将硬盘的读,写功能分开,分别进行优化。在专门用来写的硬盘上,我们可以在Linux下使用软件RAID-0(磁盘冗余阵列0级)。RAID-0在获得硬盘IO提升的同时,也会增加整个文件系统的故障率一一它等于RAID所有驱动器的故障率之和。如果需要保持或提高硬盘的容错能力,就需要实现软件RAID-1,4或5,它们能在某一个(甚至几个)磁盘驱动器故障之后仍然保持整个文件系统的正常运行,但文件读写效率不如RAID-
6、00而专门用来读的硬盘,则不用如此麻烦,可以使用普通的服务器硬盘,以降低开销。一般的文件系统,会综合考虑各种大小和格式的文件的读、写效率,因而对特定的文件读或写的效率不是最优。如果有必要,可以通过选择文件系统,以及修改文件系统的配置参数来达到对特定文件的读或写的效率最大化。比如说,如果文件系统中需要存储大量的小文件,则可以使用ReiserFS来替代Linux操作系统默认的ext3系统,因为ReiserFS是基于平衡树的文件系统结构,尤其对于大量文件的巨型文件系统,搜索速度要比使用局部的二分查找法的ext3快。ReiserFS里的目录是完全动态分配的,因此不存在ext3中常见的无法回收巨型目录占
7、用的磁盘空间的情况。ReiserFS里小文件(4K)可以直接存储进树,小文件读取和写入的速度更快,树内节点是按字节对齐的,多个小文件可共享同一个硬盘块,节约大量空间。ext3使用固定大小的块分配策略,也就是说,不到4Kl勺小文件也要占据4K的空间,导致的空间浪费比较严重。但ReiserFS对很多Linux内核支持的不是很好,如果网站想要使用它,就必须要安装与它配合的较好的内核。ReiserFS还是一个较为年轻的,发展迅速的文件系统,它相对于ext3来说有一个很大的缺陷就是,每次ReiserFS文件系统升级的时候,必须完全重新格式化整个磁盘分区。所以在选择使用的时候,需要权衡取舍。1.5. 数据
8、库集群和库表散列大型网站都有复杂的应用,这些应用必须使用数据库,那么在面对大量访问的时候,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法满足应用,于是需要使用数据库集群或者库表散列。在数据库集群方面,很多数据库都有自己的解决方案,Oracle、Sybase等都有很好的方案,常用的MySQ提供的Master/Slave也是类似的方案,使用了什么样的DB就参考相应的解决方案来实施即可。上面提到的数据库集群由于在架构、成本、扩张性方面都会受到所采用DB1型的限制,于是需要从应用程序的角度来考虑改善系统架构,库表散列是常用并且最有效的解决方案。在应用程序中安装业务和应用或者功能模块将数据库进行
9、分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户ID进行表散列,这样就能够低成本的提升系统的性能并且有很好的扩展性。如sohu的论坛就是采用了这样的架构,将论坛的用户、设置、帖子等信息进行数据库分离,然后对帖子、用户按照板块和ID进行散列数据库和表,最终可以在配置文件中进行简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能。1.6. 缓存网站架构和网站开发中的缓存也是非常重要。架构方面的缓存,Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache勺访问响应能
10、力。网站程序开发方面的缓存,Linux上提供的MemoryCachel常用的缓存接口,可以在webff发中使用,比如用Java开发的时候就可以调用MemoryCache一些数据进行缓存和通讯共享。另外,在使用web语言开发的时候,各种语言基本都有自己的缓存模块和方法。1.6.1. 硬盘级缓存硬盘级别的缓存是指将需要动态生成的内容暂时缓存在硬盘上,在一个可接受的延迟时间范围内,同样的请求不再动态生成,以达到节约系统资源,提高网站承受能力的目的。Linux环境下硬盘级缓存一般使用Squidcache。Squid是一个高性能的代理缓存服务器。和一般的代理缓存软件不同,Squid用一个单独的、非模块化
11、的、I/O驱动的进程来处理所有的客户端请求。它接受来自客户端对目标对象的请求并适当地处理这些请求。比如说,用户通过浏览器想下载(即浏览)一个webM面,浏览器请求Squid为它取得这个页面。Squid随之连接到页面所在的原始服务器并向服务器发出取得该页面的请求。取得页面后,Squid再将页面返回给用户端浏览器,并且同时在Squid本地缓存目录里保存一份副本。当下一次有用户需要同一页面时,Squid可以简单地从缓存中读取它的副本,直接返回给用户,而不用再次请求原始服务器。当前的Squid可以处理HTTPFTP,GOPHERSSL和WAI潴协议。Squid默认通过检测HTTP;、议头的Expire
12、s和Cache-Control字段来决定缓存的时间。在实际应用中,可以显式的在服务器端脚本中输出HTTPfe,也可以通过配置apache白mod_expires模块,让apache自动的给每一个网页加上过期时间。对于静态内容,如图片,视频文件,供下载的软件等,还可以针对文件类型(扩展名),用Squid的refresh_pattern来指定缓存时间。Squid运行的时候,默认会在硬盘上建两层hash目录,用来存储缓存的Object。它还会在内存中建立一个HashTable,用来记录硬盘中Object分布的情况。如果Squid配置成为一个Squid集群中的一个的话,它还会建立一个DigestTab
13、le(摘要表),用来存储其它Squid上的Object摘要。当用户端想要的资料本地硬盘上没有时,可以很快的知道应该去集群中的哪一台机器获得。在硬盘空间快要达到配置限额的时候,可以配置使用某种策略(默认使用LRULeastRecentlyUsed-最近最少用)删除一些Object,从而腾出空间。集群中的SquidServer之间可以有两种关系:第一种关系是:Child和Parent。当ChildSquidServer没有资料时,会直接向ParentSquidServer要资料,然后一直等,直到Parent给它资料为止。第二种关系是:Sibling和Sibling。当SquidServer没有资料
14、时,会先向Sibling的SquidServer要资料,如果Sibling没资料,就跳过它向Parent要或直接上原始网站去拿。默认配置的Squid,没有经过任何优化的时候,一般可以达到50%的命中率。如果需要,还可以通过参数优化,拆分业务,优化文件系统等办法,使得Squid达到90%以上的缓存命中率。Squid处理TCP£接消耗的服务器资源比真正的HTTP艮务器要小的多,当Squid分担了大部分连接,网站的承压能力就大大增强了。1.6.2. 内存级缓存内存级别的缓存是指将需要动态生成的内容暂时缓存在内存里,在一个可接受的延迟时间范围内,同样的请求不再动态生成,而是直接从内存中读取。
15、Linux环境下内存级缓存Memcached一个不错的选择。M开发的一套非常优秀的分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。和Squid的前端缓存加速不同,它是通过基于内存的对象缓存来减少数据库查询的方式改善网站的性能,而其中最吸引人的一个特性就是支持分布式部署;也就是说可以在一群机器上建立一堆Memcached服务,每个服务可以根据具体服务器的硬件配置使用不同大小的内存块,这样,理论上可以建立一个无限大的基于内存的缓存系统。Memcached是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端API包括Perl
16、/PHP/Python/Ruby/Java/C#/C等等。客户端首先与Memcached服务建立连接,然后存取对象。每个被存取的对象都有一个唯一的标识符key,存取操作均通过这个key进行,保存的时候还可以设置有效期。保存在Memcached中的对象实际上是放置在内存中的,而不是在硬盘上。Memcached进程运行之后,会预申请一块较大的内存空间,自己进行管理,用完之后再申请一块,而不是每次需要的时候去向操作系统中请。Memcached对象保存在一个巨大的Hashft中,它还使用NewHas算法来管理Hashg,从而获得进一步的性能提升。所以当分配给Memcache的内存足够大的时候,Memc
17、ache的时间消耗基本上只是网络Socket连接的时间了。Memcache也有它的不足。首先它的数据是保存在内存当中的,一旦服务进程重启(进程意外被关掉,机器重启等),数据会全部丢失。其次Memcache姒root权限运行,而且Memcache本身没有任何权限管理和认证功能,安全性不足。第一条是Memcache也为内存缓存服务使用无法避免的,当然,如果内存中的数据需要保存,可以采取更改Memcache的源代码,增加定期写入硬盘的功能。对于第二条,我们可以将Memcache服务绑定在内网IP上,通过Linux防火墙进行防护。1.7. 镜像镜像是大型网站常采用的提高性能和数据安全性的方式,镜像的技
18、术可以解决不同网络接入商和地域带来的用户访问速度差异,比如ChinaNet和EduNeR问的差异就促使了很多网站在教育网内搭建镜像站点,数据进行定时更新或者实时更新。镜像网站具体是指将一个完全相同的站点放到几个服务器上,分别有自己的URL这些服务器上的网站互相称为镜像网站。镜像网站和主站并没有太大差别,或者可以视为主站的拷贝。镜像网站的好处是:如果不能对主站作正常访问(如服务器故障,网络故障或者网速太慢等),仍能通过镜像服务器获得服务。不便之处是:更新网站内容的时候,需要同时更新多个服务器;需要用户记忆超过一个网址,或需要用户选择访问多个镜像网站中的一个,而用户选择的,不一定是最优的。在用户选
19、择的过程中,缺乏必要的可控性。在互联网发展的初期,互联网上的网站内容很少,而且大都是静态内容,更新频率底。但因为服务器运算能力低,带宽小,网速慢,热门网站的访问压力还是很大。镜像网站技术在这种情况下作为一种有效解决方案,被广泛采用。随着互联网的发展,越来越多的网站使用服务器端脚本动态生成内容,同步更新越来越困难,对可控性要求越来越高,镜像技术因为不能满足这类网站的需要,渐渐的淡出了人们的视线。但有一些大型的软件下载站,因为符合镜像网站的条件一一下载的内容是静态的,更新频率较低,对带宽,速度要求又比较高,如国外的SourceForge(http:/www.SourceF,著名开源软件托管网站),
20、Fedora(,RedHatS助的Linux发行版),国内的华军软件园(),天空软件站()等,还在使用这项技术。在网站建设的过程中,可以根据实际情况,将静态内容作一些镜像,以加快访问速度,提升用户体验。在镜像的细节技术方面,有很多专业的现成的解决架构和产品可选。也有廉价的通过软件实现的思路,比如Linux上的rsync等工具。1.8. CDN内容分发网络CDN1全称是ContentDeliveryNetwork,即内容分发网络。其目的是通过在现有的互联网中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容
21、,分散服务器的压力,解决互联网拥挤的状况,提高用户访问网站的响应速度。从而解决由于网络带宽小、用户访问量大、网点分布不均等原因所造成的用户访问网站响应速度慢的问题。CDN1镜像网站技术的不同之处在于网站代替用户去选择最优的内容服务器,增强了可控制性。CD感实是夹在网页浏览者和被访问的服务器中间的一层镜像或者说缓存,浏览者访问时点击的还是服务器原来的UR地址,但是看到的内容其实是对浏览者来说最优的一台镜像服务器上的页面缓存内容。这是通过调整服务器的域名解析来实现的。使用CDNfc术的域名解析服务器需要维护一个镜像服务器列表和一份来访IP到镜像服务器的对应表。当一个用户的请求到来的时候,根据用户的
22、IP,查询对应表,得到最优的镜像服务器的IP地址,返回给用户。这里的最优,需要综合考虑服务器的处理能力,带宽,离访问者的距离远近等因素。当某个地方的镜像网站流量过大,带宽消耗过快,或者出现服务器,网络等故障的时候,可以很方便的设置将用户的访问转到另外一个地方。这样就增强了可控制性。图2CDNM理示意图CDIW络加速技术也有它的局限性。首先,因为内容更新的时候,需要同步更新多台镜像服务器,所以它也只适用于内容更新不太频繁,或者对实时性要求不是很高的网站;其次,DN解析有缓存,当某一个镜像网站的访问需要转移时,主DNS艮务器更改了IP解析结果,但各地的DNS艮务器缓存更新会滞后一段时问,这段时间内
23、用户的访问仍然会指向该服务器,可控制性依然有不足。目前,国内访问量较高的大型网站如新浪、网易等的资讯频道,均使用CDIW络加速技术,虽然网站的访问量巨大,但无论在什么地方访问,速度都会很快。但论坛,邮箱等更新频繁,实时性要求高的频道,则不适合使用这种技术。1.9. 负载均衡负载均衡将是大型网站解决高负荷访问和大量并发请求采用的常用解决办1.9.1. 负载均衡主要应用技术1、DN顼载均衡最早的负载均衡技术是通过DN系实现的,在DN外为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。DN预载均衡是一种简单而有效的方法,但是
24、它不能区分服务器的差异,也不能反映服务器的当前运行状态。2、代理服务器负载均衡使用代理服务器,可以将请求转发给内部的服务器,使用这种加速模式显然可以提升静态网页的访问速度。然而,也可以考虑这样一种技术,使用代理服务器将请求均匀转发给多台服务器,从而达到负载均衡的目的。3、地址转换网关负载均衡支持负载均衡的地址转换网关,可以将一个外部IP地址映射为多个内部IP地址,对每次TCPS接请求动态使用其中一个内部地址,达到负载均衡的目的。4、协议内部支持负载均衡除了这三种负载均衡方式之外,有的协议内部支持与负载均衡相关的功能,例如HTT初议中的重定向能力等,HTTP1行于TCPS接的最高层。5、NA顶载
25、均衡NAT(NetworkAddressTranslation网络地址转换)简单地说就是将一个IP地址转换为另一个IP地址,一般用于未经注册的内部地址与合法的、已获注册的InternetIP地址间进行转换。适用于解决InternetIP地址紧张、不想让网络外部知道内部网络结构等的场合下。6、反向代理负载均衡普通代理方式是代理内部网络用户访问internet上服务器的连接请求,客户端必须指定代理服务器,并将本来要直接发送到internet上服务器的连接请求发送给代理服务器处理。反向代理(ReverseProxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的
26、服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。反向代理负载均衡技术是把将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。7、混合型负载均衡在有些大型网络由于多个服务器群内硬件设备、各自的规模、提供的服务等的差异,我们可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这多个服务器群问再一次负载均衡或群集起来以一个整体向外界提供服务(即把这多个服务器群当做一个新的服务器群),从而达到最佳的性能。我们将这种方式称之为混合型负载均衡。此种方式有时也用于单台均衡设备
27、的性能不能满足大量连接请求的情况下。1.9.2. 负载均衡的分类1、软/硬件负载均衡软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNSLoadBalance,CheckpointFirewall-1ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。软件解决方案缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,受到操作系统的限制;由于操作
28、系统本身的Bug,往往会引起安全问题。硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备我们通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PCt,一块连接到Internet上,一块连接到后端服务器群的内部网络上。一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。2、本地/全局负载
29、均衡负载均衡从其应用的地理结构上分为本地负载均衡(LocalLoadBalance)和全局负载均衡(GlobalLoadBalance,也叫地域负载均衡),本地负载均衡是指对本地的服务器群做负载均衡,全局负载均衡是指对分别放置在不同的地理位置、有不同网络结构的服务器群间作负载均衡。本地负载均衡能有效地解决数据流量过大、网络负荷过重的问题,并且不需花费昂贵开支购置性能卓越的服务器,充分利用现有设备,避免服务器单点故障造成数据流量的损失。具有灵活多样的均衡策略把数据流量合理地分配给服务器群内的服务器共同负担。即使是再给现有服务器扩充升级,也只是简单地增加一个新的服务器到服务群中,而不需改变现有网络
30、结构、停止现有的服务。全局负载均衡主要用于在一个多区域拥有自己服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度,也可用于子公司分散站点分布广的大公司通过Intranet(企业内部互联网)来达到资源统一合理分配的目的。全局负载均衡有以下的特点:A、实现地理位置无关性,能够远距离为用户提供完全的透明服务。B、除了能避免服务器、数据中心等的单点失效,也能避免由于ISP专线故障引起的单点失效。C、解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量。1.10. 硬件四层交换第四层交换使用第三层和第四层信息包的报头信息,根据应用区间
31、识别业务流,将整个区间段的业务流分配到合适的应用服务器进行处理。第四层交换功能就象是虚IP,指向物理服务器。它传输的业务服从的协议多种多样,有HTTPFTRNFSTelnet或其他协议。这些业务在物理服务器基础上,需要复杂的载量平衡算法。在IP世界,业务类型由终端TC城UD端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TC刖UD端口共同决定。在硬件四层交换产品领域,有一些知名的产品可以选择,比如Alteon、F5,这些产品很昂贵,但是物有所值,能够提供非常优秀的性能和很灵活的管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteon就搞定了。1.11. 软件四层交换大家知道了硬件四层交换机的原理后,基于OS模型来实现的软件四层交换也就应运而生,这样的解决方案实现的原理一致,不过性能稍差。但是满足一定量的压力还是游刃有余的,有人说软件实现方式其实更灵活,处理能力完全看你配置
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 赣南科技学院《农业标准化概论》2023-2024学年第一学期期末试卷
- 赣东学院《中国古代文学专题》2023-2024学年第一学期期末试卷
- 甘孜职业学院《影视广告创意与策划》2023-2024学年第一学期期末试卷
- 甘肃中医药大学《逻辑与逻辑思维》2023-2024学年第一学期期末试卷
- 科室医疗质量与安全管理制度范文(4篇)
- 2025年1月日历表(含农历-周数-方便记事备忘)
- 药房服务培训课件
- 信息安全事件课件
- 小学生起床图片课件
- 益阳定点月嫂培训课件
- 《Power Bi应用》课程标准
- 《疯狂动物城》全本台词中英文对照
- 幼儿园的品格与道德教育主题班会课件
- 2024抗菌药物分级管理及临床合理应用考核试题及答案
- 储能系统的应急预案措施
- 论海澜之家存货管理的问题、成因及其对策
- 医院长期医嘱单(模板)
- 班主任育人故事(通用17篇)
- 初二化学上册知识点7篇
- 汽车保养与维护
- 2023-2024学年贵州省黔西南布依族苗族自治州贞丰县三年级数学第一学期期末经典模拟试题含答案
评论
0/150
提交评论