⑴ PHP集群如何部署当网站的访问,数据过多时.程序应该如何调整
个人建议 至少4台服务器,并且最好是以局域网方式互通(服务器4可以完全独立)服务器1和服务器2都只放php代码程序,暴露在外网,分别当电信服务器和网通服务器服务器3只放数据库,通过用户权限,仅允许被服务器1和2访问——不暴露在外网服务器4只放附件,暴露在外网,所有的附件请求,都直接对这个服务器进行需要指出的是,你如果作为网站管理者,每次管理数据库,都要用1或者2当跳板,才可以访问。
⑵ PHPCMS能不能做成多台服务器集群
其实这些都可以实现,当时设计的时候就考虑了单独的图片服务器的需求,但是如果真要操作需要修改部分程序,但不需要像楼上说的那样修改架构!不过三个服务器可以前端为一个squid的方式,这样静态页面都在前端减少对于程序服务器的压力。还可以通过rsync把附件文件传送到其他服务器,然后修改UPLOAD_URL来使图片地址改为另外一台服务器
⑶ php ecshop 搭建服务器集群
这个只需要咨询一下服务器厂商(比如正睿服务器等),就咨询一下网站做服务器集群相关内容(以购买服务器的方式咨询效果最好),这种厂商对这方面应该很清楚。
⑷ php可以做集群和分布式运算吗
PHP其实没有这个需求,所以答案是,不能。PHP作为一个模板语言,首要任务是输出HTML以及处理一些web方面的工作。如果你的本意是想用脚本语言来做分布式运算,你可以试试erlang,这门语言专门为这个领域做了大量优化。
⑸ 网站的基本架构是什么
网站架构按照制作步骤分为硬架构和软架构。
一、硬架构
1、机房:在选择机房的时候,根据网站用户的地域分布,可以选择网通、电信等单机房或双机房。
2、带宽:预估网站每天的访问量,根据访问量选择合适的带宽,计算带宽大小主要涉及峰值流量和页面大小两个指标。
3、服务器:选择需要的服务器,如图片服务器,页面服务器,数据库服务器,应用服务器,日志服务器,对于访问量大点的网站而言,分离单独的图片服务器和页面服务器相当必要。
二、软架构
1、网站的框架:现在的PHP框架有很多选择,比如:CakePHP,Symfony,Zend Framework,根据创作团队对各个框架熟悉程度选择。
2、逻辑的分层
1)表现层:所有和表现相关的逻辑都应该被纳入表现层的范畴。
2)应用层:主要作用是定义用户可以做什么,并把操作结果反馈给表现层。
3)领域层:包含领域逻辑的层,就是告诉用户具体的操作流程的。
4)持久层:即数据库,保存领域模型保存到数据库,包含网站的架构和逻辑关系等。
(5)php网站集群扩展阅读
网站的分类
1、根据网站所用编程语言分类:例如asp网站、php网站、jsp网站、Asp. net网站等;
2、根据网站的用途分类:例如门户网站(综合网站)、行业网站、娱乐网站等;
3、根据网站的功能分类:例如单一网站(企业网站)、多功能网站(网络商城)等等。
4、根据网站的持有者分类:例如个人网站、商业网站、政府网站、教育网站等。
5、根据网站的商业目的分类:营利型网站(行业网站、论坛)、非营利性型网站(企业网站、政府网站、教育网站)。
⑹ php怎么连接oracle 集群(oracle rac)
$oraUser="nihao";//数据库账号 $oraPass="123456"; //密码$oraDB="(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SID=orcl)))"; //SID要和连接的数据库对应上$conn = ociLOGOn($oraUser,$oraPass,$oraDB) ;//连接$rs_search=OCIParse($conn, $sql_search); //执行SQL语句 OCIExecute($rs_search);//$rs_search这个是结果集可以用$row=oci_fetch_array($rs_search);//把数据拿出来 这是一条数据写法 多条循环有不明白的HI我
⑺ php集群是什么意思
程序源代码如下:main() { int i,j,k; printf("\n"); for(i=1;i<5;i++)/*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%d",bonus); }
⑻ 如何实现php+session+memcached高可用集群
在这个互联网高度发达的时代,许多应用的用户动辄成百上千万,甚至上亿。为了支持海量用户的访问,应用服务器集群这种水平扩展的方式是最常用的。这种情形下,就会涉及到许多单机环境下完全不需要考虑的问题,这其中session的创建、共享和存储是最常见之一。在单机环境中,Session的创建和存储都是由同一个应用服务器实例来完成,而存储也仅是内存中,最多会在正常的停止服务器的时候,把当前活动的Session钝化到本地,再次启动时重新加载。而多个实例之间,Session数据是完全隔离的。而为了实现Session的高可用,多实例间数据共享是必然的,下面我们以Redis 的SessionManager实现多Tomcat实例Session共享的配置为例,我们来梳理下一般session共享的流程:添加具体要使用的manager的Jar文件及其依赖redis session manager依赖jedis, commons-pool, commons-pool2对应版本的redis session manager的jar文件在TOMCAT_HOME/conf/context.xml中增加如下配置<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /><Manager className="com.radiadesign.catalina.session.RedisSessionManager"host="localhost"port="6379" database="0"maxInactiveInterval="30" />其中host和port等替换为对应的配置信息启动多个Tomcat实例,以自带的examples应用为例进行验证访问examples应用的servlets/servlet/SessionExample,在页面中添加数据到session中,并查看页面上对应的session信息访问另一个实例上相同应用的页面,查看session信息,两者应该是一致的使用redis-cli查看redis中存储的对应数据,相应的sessionId对应的数据已经保存了下来以上是一个基本的配置过程,而在这些配置与验证的步骤中,第二步是核心逻辑实现。 前面的文章,曾介绍过Tomcat的Valve,在请求处理时,Pipeline中的各个Valve的invoke方法会依次执行。Tomcat的AccessLogValve介绍此处的session处理,就是以一个自定义Valve的形式进行的。关于Session的文章,前面也写过几篇,会附在结尾处。以下是RedisSessionhandlerValve的invoke方法,我们看,主要是在Valve执行后进行Session的存储或移除。public void invoke(Request request, Response response) {try {getNext().invoke(request, response);} finally {final Session session = request.getSessionInternal(false);storeOrRemoveSession(session);manager.afterRequest();}}而session的保存和移除又是通过manager执行的。 manager.save(session); manager.remove(session);这里,manager就是前面定义的RedisSessionManager。默认单实例情况下,我们使用的都是StandardManager,对比一下两者,标准的Manager对于session的创建和删除,都会调到其父类ManagerBase中相应的方法,public void add(Session session) {sessions.put(session.getIdInternal(), session);int size = getActiveSessions();if( size > maxActive ) {synchronized(maxActiveUpdateLock) {if( size > maxActive ) {maxActive = size;}}}}public void remove(Session session, boolean update) {if (session.getIdInternal() != null) {sessions.remove(session.getIdInternal());}}我们来看,由于其只保存在内存的Map中protected Map<String, Session> sessions = newConcurrentHashMap<>(),每个Tomcat实例都对于不同的map,多个实例间无法共享数据。对应到RedisSessionManager对于session的处理,都是直接操作redis,基本代码是下面这个样:public void save(Session session) throws IOException {Jedis jedis = null;Boolean error = true;try {RedisSession redisSession = (RedisSession) session;Boolean sessionIsDirty = redisSession.isDirty();redisSession.resetDirtyTracking();byte[] binaryId = redisSession.getId().getBytes();jedis = acquireConnection();if (sessionIsDirty || currentSessionIsPersisted.get() != true) {jedis.set(binaryId, serializer.serializeFrom(redisSession));}currentSessionIsPersisted.set(true);jedis.expire(binaryId, getMaxInactiveInterval());} }移除时的操作是这样的public void remove(Session session, boolean update) {Jedis jedis = null;Boolean error = true;log.trace("Removing session ID : " + session.getId());try {jedis = acquireConnection();jedis.del(session.getId());error = false;} finally {if (jedis != null) {returnConnection(jedis, error);}}}而此时,多个Tomcat实例都读取相同的Redis,session数据是共享的,其它实例的初始请求过来时,由于会执行findSession的操作,此时会从Redis中加载session,public Session findSession(String id) throws IOException {RedisSession session;if (id == null) {session = null;currentSessionIsPersisted.set(false);} else if (id.equals(currentSessionId.get())) {session = currentSession.get();} else {session = loadSessionFromRedis(id); // 看这里,会从redis中loadif (session != null) {currentSessionIsPersisted.set(true);}}currentSession.set(session);currentSessionId.set(id);return session;}从而可以保证在一个实例被切换后,另外的实例可以继续响应同一个session的请求。以上即为Redis实现session共享高可用的一些关键内容。有兴趣的朋友可以看下通过Memcached实现高可用,也是这个原理。顺着这个思路,如果你有将Session存储在其它地方的需求时,完全可以写一个出来,自己动手,丰衣足食。总结一下,我们是通过自定义的Valve来实现请求后session的拦截,同时,使用自定义的SessionManager,来满足不同的session创建与存储的需求。而至于是存储在Redis/Memcached中,还是存储在DB中,只是位置的区别。原理,是一致的。