首页 文章 精选 留言 我的

精选列表

搜索[c 14],共10000篇文章
优秀的个人博客,低调大师

Java技术周刊第14期:浅谈HashMap,探索JDK(集合框架)

【点击订阅Java技术周刊】 Java的开发者们: 云栖社区已有5000位Java开发者,发布了30000+Java文章(文章列表),沉淀了7000+的Java精品问答(问答列表)。 Java技术周刊将会为大家介绍最新的Java技术与动态、预告活动、最热问答、直播教程等,欢迎大家订阅Java技术周刊和关注Java社区公众号。 最新动态 浅谈HashMap,探索JDK(集合框架)Collection API 位于 java.util 包中。包中的 Collection 接口是 JAVA 对于集合这一概念的抽象,存储一组类型相同的对象。 Sharding-JDBC 使用入门和基本配置Sharding-JDBC使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,且完全兼容JDBC和各种ORM框架。 常见的Spring异常分析及处理相信我

优秀的个人博客,低调大师

docker学习系列14 使用haproxy实现mysql集群的负载均衡

在上节中我们创建了 mysql 集群。 实际工作中,我们不希望让某一数据库节点处理所有的请求,这样的话单个负载高,性能差。 image.png 在这里我们使用haproxy作为负载均衡的中间件,类似的还有LVS,但是好像不支持虚拟机,在docker中用不了。 image.png 实现流程: 下载镜像 docker pull haproxy 宿主机创建 haproxy 的配置文件,比如路径是 D:\Docker\haproxy\haproxy.cfg 最重要的就是配置文件了。这里内容如下: global daemon # nbproc 1 # pidfile /var/run/haproxy.pid # 工作目录 chroot /usr/local/etc/haproxy defaults log 127.0.0.1 local0 err #[err warning info debug] mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置 option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器 option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接 option dontlognull #日志中不记录负载均衡的心跳检测记录 maxconn 4096 #默认的最大连接数 timeout connect 5000ms #连接超时 timeout client 30000ms #客户端超时 timeout server 30000ms #服务器超时 #timeout check 2000 #=心跳检测超时 ######## 监控界面配置 ################# listen admin_status # 监控界面访问信息 bind 0.0.0.0:8888 mode http # URI相对地址 stats uri /dbs # 统计报告格式 stats realm Global\ statistics # 登录账户信息 stats auth admin:123456 ########frontend配置############## ######## mysql负载均衡配置 ############### listen proxy-mysql bind 0.0.0.0:3306 mode tcp # 负载均衡算法 # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin balance roundrobin # 日志格式 option tcplog # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户 # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES; option mysql-check user haproxy # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效 server MYSQL_1 172.18.0.2:3306 check weight 1 maxconn 2000 server MYSQL_2 172.18.0.3:3306 check weight 1 maxconn 2000 server MYSQL_3 172.18.0.4:3306 check weight 1 maxconn 2000 # 使用keepalive检测死链 # option tcpka ######################################### 启动 haproxy 的容器,镜像名称为 h1,网络名称使用上节中创建的 pxc-network,就是和 mysql 集群处于同一网络。docker run -it -d -p 4001:8888 -p 4002:3306 -v D:/Docker/haproxy:/usr/local/etc/haproxy --name h1 --net=pxc-network 进去容器,并让 haproxy 加载配置docker exec -it h1 bashhaproxy -f /usr/local/etc/haproxy/ 宿主机打开 http://localhost:4001/dbs 这是haproxy 提供的图形界面 image.png 可以看到每个mysql节点运行状态是绿色,说明正常。 测试,停掉一个数据库节点 docker stop pxc_node1 ,发现有一个变红了。 image.png 项目中可以使用配置的 4002 来连接数据库,这样请求会被分发到各个子节点。 总结: 数据库的负载均衡配置还是比较简单的,关键是负载均衡算法,如果每个数据库节点配置都一样,可以使用轮询算法,如果不一样,可以使用权重算法,让配置高的多接收请求。 官方的教程 问题: 启动停掉的节点 docker start pxc_node1,mysql恢复不起来了。待研究。有谁知道麻烦告诉我。 image.png

优秀的个人博客,低调大师

14、系统架构师指南 - 软件项目角色指南系列文章

第13章 系统架构师 系统架构师这个职位的重要性是不言而喻的,在项目设计开发过程中处于高层的作用。系统架构师需要在项目的需求相对稳定之后就进行系统架构设计,以及在项目开发过程中对编码的开发架构和编码技术等问题进行解决。系统架构师在实际的项目系统设计过程中就具有其重要性,在项目系统开发过程中可能需要不断的调整架构上的细节,比如接口方面的内容,所以,系统架构师的作用也是贯穿于整个项目系统从设计到开发完成的这样一个过程。 1、工作职责 系统架构师的日常工作更加的单一,但是又有其重要的一面。系统架构师在系统需求阶段就必须介入系统开发问题,同时根据需求到设计的这么一个理念去对系统的整体架构进行设计。 l 配合项目经理在需求到设计的过程中进行系统架构设计; l 在项目开发过程中对架构及时的调整; l 对开发中的系统架构问题对项目组成员进行讲解,需要组员对整个系统架构进行了解; 2、应具备的知识 系统架构师因为是作为系统的架构设计师对系统进行架构设计的,所以其需要在系统级别的问题上必须精通。对操作系统的底层和开发代码的底层进行理解,并在实际的工作过程中去进行实践应用,让系统架构能够在其它项目中进行复用。 3、日常工作 系统架构师的工作比较单一,基本上在项目需求到设计阶段就基本完成了,后期的系统架构上的调整不大。系统架构师日常需要对系统底层进行理解,并且对系统的业务方面也需要理解,并在设计阶段根据需求对系统的架构进行设计,所以,在对系统架构设计完毕之后,系统架构师就相对比较清闲了。 4、经验提升的方法 系统架构师在实际的工作过程中也需要及时的补充经验知识,特别是现在的新技术的诞生,需要新的架构设计理念,比如大数据、云计算等。系统架构师这个职位也有一定的年限了,软件水平考试中也有考试内容,但是系统架构师的经验是在实际的工作过程中总结出来的,更多的是自我提高,市场上的系统架构设计暂时还没有相关的培训。 5、与其他角色的沟通 系统架构师的设计理念就与项目组的其他角色有沟通需要。其在需求到设计阶段就必须介入到系统架构设计,与技术经理共同把系统架构做好,并在实际的应用中进行及时调整。所以,系统架构师主要与技术经理、软件工程师进行沟通比较多。 6、应阅读的书籍 系统架构师因为相关的培训比较少,所以基本上都是自我学习比较多。 l [软件架构设计:程序员向架构师转型必备(第二版)]; l Microsoft.NET.框架程序设计; l 软件架构师应该知道的97件事; l SOA平台体系架构; l WEB前台架构设计; l 大规模网站架构设计详解; 7、应铭记的话 l 不断学习和总结系统架构设计经验; l 对新的系统需要理解并在实际的架构设计中进行处理; Austin Liu 刘恒辉 Department Manager,Product Manager,Project Manager and Software Designer E-Mail:lzhdim@163.com Blog: http://lzhdim.cnblogs.com

优秀的个人博客,低调大师

云场景实践研究第14期:南京路特软件

更多云场景实践研究案例,点击这里:【云场景实践研究合集】联合不是简单的加法,而是无限的生态,谁会是下一个独角兽 南京路特软件的产品线内子产品太多,并且相互有重叠,导致基础服务大量重复,并且无法在开发阶段将其拆开,面对40台服务器和一堆服务,公司却仅有一个专职运维人员,此外,公司的持续交付产品/服务效率非常低,也无法有效掌握负载峰谷,进而合理调配资源。通过使用阿里云容器服务,较好地解决了其所面对的敏捷、成本、可靠这困扰南京路特的三大核心问题。当然,在这一过程中,南京路特也在Docker实践中不断踩坑,也不断地总结经验教训,并总结出了适合中小企业实践Docker技术的两个常用场景。 “从痛苦到曙光,从濒临放弃到看到曙光,再到磕磕绊绊行至远方,感谢我们所有的媒体客户和阿里云默默的支持。路还很长,你我同在...” ——戚俊 南京路特软件有限公司

优秀的个人博客,低调大师

服务器架构之性能扩展-第十三 章(14)

十三章、Cpanel的安装和配置 商业化的主机管理软件已经逐渐在主机市场起到决定性的市场空间,因为它的部署更加快捷方便,主机的管理也变得智能化和快捷化更有它的强大功能是普通源码安装或一些开源软件达不到的效果。在商业话的主机管理软件里,又以linux平台下的cpanel面板和windows平台下的plesk面板市场占有率最高。 Cpanel简介和优点 cPanel是一套基于Web的自动化主机管理软件,构建于LAMP环境之上,主要应用于PHP语言(.NET环境的产品仍在开发中),官网为:cpanel.net。 特点:图形化界面直观,操作简单方便,功能强大域名、邮箱和文件管理器等每个按钮功能齐全强大,部署简单快捷自动化强可以直接部署lamp环境,可扩展性强,并且官方提供技术支持。 Cpanel的安装 cPanel和WHM作为商业化的主机管理软件,只能安装到安装好操作系统的空白服务器上。你的服务器上不能有任何准备保留的数据。这些数据包括但不限于网页,配置文件,用户账户和脚本。安装程序可能会对你的系统做不少改动,包括为你下载和配置需要的程序包。由于cPanel对系统的改动量相当大,因此建议,如果要卸载cPanel和WHM软件,请重新格式化服务器。 注意:cpanel需要授权才能使用其全部功能,如国内有idcvender.com(文德数据)在做代理商。 Cpanel安装条件 ·P266 ·256Meg的RAM(内存) ·20GB的空间(托管多个账户需要的分区空间。新文件需要的空间不到500MB) Cpanel的安装 确认你是作为root登录的,然后执行以下命令: 1.#cd/home 2.#wgethttp://layer1.cpanel.net/latest 3.#shlatest 安装程序开始了,不同的机器可能需要30到60分钟不等。如果出现提问又没有默认的回答,请按Enter或q键。 这时我们可以执行,servicehttpdrestart,检查一下80端口。 然后我们开始测试,cpanel的安装和使用情况,我们首先执行ifconfig来检查服务器分配的ip,然后我们执行。http://ip/whm或者http://ip:2086来打开cpanel,我们首次打开要进行配置。 首次配置cpanel 1)、第一步,同意协议 2)、设置网络 3)、设置ip地址 4)、设置ns 5)、设置服务 6)、完成设置 LoggingOn(登录) 你需要登录后才能使用WebHostManager来管理你的网络服务器。记住,WebHostManager给了用户很高的访问权限,只能让可信赖的人员使用。 Steps(步骤) 1.在网络浏览器中输入你WebHostManager的地址。地址格式应该是http://www.yourdomain.com:2086/或https://www.yourdomain.com:2087/。 2.在UserName和Password栏中输入你的用户名(root)和密码(服务器的根密码)。 3.点击OK。 4.接着你会看到WebHostManager的主页面。 5.会看到左上方有notice警告信息,是因为没有被授权,目前中国的文德数据公司作为cpanel的中国代理,可以获得授权。 然后,你便可以按照自己的要求来配置服务器,其中有一点很重要,就是我们可以通过software-》easyapache去安装定制我们需要的软件,然后进行编译即可,省去了我们通过命令来编译网络环境的麻烦。 至此,一个服务器环境搭建完毕,你便可以在这台主机上方便的管理用户账户了账户了。 Cpanel防火请csf的部署 Csf是一个可以极大提高独立主机和虚拟专用主机安全的一个应用广泛的程序,cpanel默认是不安装的,需要安装然后才会出现在插件里 CSF安装 rm-fvcsf.tgzwgethttp://www.configserver.com/free/csf.tgztar-xzfcsf.tgzcdcsfshinstall.sh CSF设置 安装csf后进入plugins下面就会看到ConfigServerSecurity&Firewall的图标编辑配置文件,执行下面的路径修改以下内容: Main>>Plugins>>ConfigServerSecurity&Firewall>>firewallconfigration TESTING=0 TCP_IN=增加30000:35000 ICMP_IN_RATE=2/s LF_ALERT_TO=heserver@gmail.com CT_LIMIT=150CT_SKIP_TIME_WAIT=1CT_PORTS=80 LF_SELECT=1LF_FTPD_PERM=900LF_SMTPAUTH_PERM=900LF_IMAPD_PERM=900LF_HTACCESS=0LF_CPANEL_PERM=900LF_MODSEC=0 csf.allow中添加: 本地ip pure-ftp设置 CSF的TCP_IN增加端口30000:35000 编辑Pure-ftp设置: vi/etc/pure-ftpd.confPassivePortRange3000035000 servicepure-ftpdrestart 测试csf:#perl/etc/csf/csftest.pl Cpanel的账户管理 我们可以通过Main>>AccountFunctions>>CreateaNewAccount建立用户 通过Main>>AccountInformation>>ListAccounts管理用户 通过http://ip:2082或http://ip/cpanel或http://域名:2082来管理账户。 当然我们管理主机的时候还要借助于whm和远程字符界面工具如putty,远程kvm远程控制台共同维护服务器的稳定运行。 本文转自zsaisai 51CTO博客,原文链接:http://blog.51cto.com/3402313/1036281

优秀的个人博客,低调大师

Android应用程序键盘(Keyboard)消息处理机制分析(14)

3.InputManager分发键盘消息给应用程序的过程分析 在分析InputManager分发键盘消息给应用程序的过程之前,我们先假设现在没有键盘事件发生,因此,InputManager中的InputReader正在睡眠等待键盘事件的发生,而InputManager中的InputDispatcher正在等待InputReader从睡眠中醒过来并且唤醒它,而应用程序也正在消息循环中等待InputDispatcher从睡眠中醒过来并且唤醒它。这时候,用户按下键盘中的一个键,于是,一系列唤醒的事件就依次发生了,一直到应用程序中正在显示的Activity得到通知,有键盘事件发生了。我们先来看这个过程的序列图,然后再详细分析每一个步骤: Step 1. InputReader.pollOnce Step 2. EventHub.getEvent 这两个函数分别定义在frameworks/base/libs/ui/InputReader.cpp和frameworks/base/libs/ui/EventHub.cpp文件中,前面我们在分析InputManager的启动过程的Step 17和Step 18时,已经看到过这两个函数了。InputReaderThread线程会不民地循环调用InputReader.pollOnce函数来读入键盘事件,而实际的键盘事件读入操作是由EventHub.getEvent函数来进行的。如果当前没有键盘事件发生,InputReaderThread线程就会睡眠在EventHub.getEvent函数上,而当键盘事件发生后,就会把这个事件封装成一个RawEvent对象,然后返回到pollOnce函数中,执行process函数进一步处理: voidInputReader::loopOnce(){ RawEventrawEvent; mEventHub->getEvent(&rawEvent); ...... process(&rawEvent); } Step 3. InputReader.process 这个函数定义在frameworks/base/libs/ui/InputReader.cpp文件中: voidInputReader::process(constRawEvent*rawEvent){ switch(rawEvent->type){ caseEventHubInterface::DEVICE_ADDED: addDevice(rawEvent->deviceId); break; caseEventHubInterface::DEVICE_REMOVED: removeDevice(rawEvent->deviceId); break; caseEventHubInterface::FINISHED_DEVICE_SCAN: handleConfigurationChanged(rawEvent->when); break; default: consumeEvent(rawEvent); break; } } 当键盘事件发生时,rawEvent->type的值为EV_KEY,这是一个宏定义,具体可以参考bionic/libc/kernel/common/linux/input.h文件: #defineEV_KEY0x01 因此,接下来会调用consumeEvent函数进一步处理。 Step 4.InputReader.consumeEvent 这个函数定义在frameworks/base/libs/ui/InputReader.cpp文件中: voidInputReader::consumeEvent(constRawEvent*rawEvent){ int32_tdeviceId=rawEvent->deviceId; {//acquiredeviceregistryreaderlock RWLock::AutoRLock_rl(mDeviceRegistryLock); ssize_tdeviceIndex=mDevices.indexOfKey(deviceId); if(deviceIndex<0){ LOGW("DiscardingeventforunknowndeviceId%d.",deviceId); return; } InputDevice*device=mDevices.valueAt(deviceIndex); if(device->isIgnored()){ //LOGD("DiscardingeventforignoreddeviceId%d.",deviceId); return; } device->process(rawEvent); }//releasedeviceregistryreaderlock } 首先从rawEvent中取得触发键盘事件设备对象device,然后调用它的process函数进行处理。 Step 5. InputDevice.process 这个函数定义在frameworks/base/libs/ui/InputReader.cpp文件中: voidInputDevice::process(constRawEvent*rawEvent){ size_tnumMappers=mMappers.size(); for(size_ti=0;i<numMappers;i++){ InputMapper*mapper=mMappers[i]; mapper->process(rawEvent); } } 这里的mMapper成员变量保存了一系列输入设备事件处理象,例如负责处理键盘事件的KeyboardKeyMapper对象、负责处理轨迹球事件的TrackballInputMapper对象以及负责处理触摸屏事件的TouchInputMapper对象, 它们是在InputReader类的成员函数createDevice中创建的。这里查询每一个InputMapper对象是否要对当前发生的事件进行处理。由于发生的是键盘事件,真正会对该事件进行处理的只有KeyboardKeyMapper对象。 Step 6.KeyboardInputMapper.process 这个函数定义在frameworks/base/libs/ui/InputReader.cpp文件中: voidKeyboardInputMapper::process(constRawEvent*rawEvent){ switch(rawEvent->type){ caseEV_KEY:{ int32_tscanCode=rawEvent->scanCode; if(isKeyboardOrGamepadKey(scanCode)){ processKey(rawEvent->when,rawEvent->value!=0,rawEvent->keyCode,scanCode, rawEvent->flags); } break; } } } 这个函数首先会检查一下键盘扫描码是否正确,如果正确的话,就会调用processKey函数进一步处理。 本文转自 Luoshengyang 51CTO博客,原文链接:http://blog.51cto.com/shyluo/966632,如需转载请自行联系原作者

优秀的个人博客,低调大师

云计算与 OpenStack - 每天5分钟玩转 OpenStack(14)

“云计算” 算是近年来最热的词了。现在 IT 行业见面不说这三个字您都不好意思跟人家打招呼。 对于云计算,学术界有各种定义,大家有兴趣可以百度一下。 CloudMan 这里主要想从技术的角度谈谈对云计算的理解。 基本概念 所有的新事物都不是突然冒出来的,都有前世和今生。 云计算也是IT技术不断发展的产物。 要理解云计算,需要对IT系统架构的发展过程有所认识。 请看下图 IT系统架构的发展到目前为止大致可以分为3个阶段: 物理机架构这一阶段,应用部署和运行在物理机上。 比如企业要上一个ERP系统,如果规模不大,可以找3台物理机,分别部署Web服务器、应用服务器和数据库服务器。 如果规模大一点,各种服务器可以采用集群架构,但每个集群成员也还是直接部署在物理机上。 我见过的客户早期都是这种架构,一套应用一套服务器,通常系统的资源使用率都很低,达到20%的都是好的。 虚拟化架构摩尔定律决定了物理服务器的计算能力越来越强,虚拟化技术的发展大大提高了物理服务器的资源使用率。 这个阶段,物理机上运行若干虚拟机,应用系统直接部署到虚拟机上。 虚拟化的好处还体现在减少了需要管理的物理机数量,同时节省了维护成本。 云计算架构 虚拟化提高了单台物理机的资源使用率,随着虚拟化技术的应用,IT环境中有越来越多的虚拟机,这时新的需求产生了: 如何对IT环境中的虚拟机进行统一和高效的管理。 有需求就有供给,云计算登上了历史舞台。 计算(CPU/内存)、存储和网络是 IT 系统的三类资源。 通过云计算平台,这三类资源变成了三个池子。 当需要虚机的时候,只需要向平台提供虚机的规格。 平台会快速从三个资源池分配相应的资源,部署出这样一个满足规格的虚机。 虚机的使用者不再需要关心虚机运行在哪里,存储空间从哪里来,IP是如何分配,这些云平台都搞定了。 云平台是一个面向服务的架构,按照提供服务的不同分为 IaaS、PaaS 和 SaaS。 请看下图 IaaS(Infrastructure as a Service)提供的服务是虚拟机。 IaaS 负责管理虚机的生命周期,包括创建、修改、备份、启停、销毁等。 使用者从云平台得到的是一个已经安装好镜像(操作系统+其他预装软件)的虚拟机。 使用者需要关心虚机的类型(OS)和配置(CPU、内存、磁盘),并且自己负责部署上层的中间件和应用。 IaaS 的使用者通常是数据中心的系统管理员。 典型的 IaaS 例子有 AWS、Rackspace、阿里云等 PaaS(Platform as a Service)提供的服务是应用的运行环境和一系列中间件服务(比如数据库、消息队列等)。 使用者只需专注应用的开发,并将自己的应用和数据部署到PaaS环境中。 PaaS负责保证这些服务的可用性和性能。 PaaS的使用者通常是应用的开发人员。 典型的 PaaS 有 Google App Engine、IBM BlueMix 等 SaaS(Software as a Service)提供的是应用服务。 使用者只需要登录并使用应用,无需关心应用使用什么技术实现,也不需要关系应用部署在哪里。 SaaS的使用者通常是应用的最终用户。 典型的 SaaS 有 Google Gmail、Salesforce 等 云计算和 OpenStack OpenStack is a cloud operating system that controls large pools of compute, storage, and networking resources throughout a datacenter, all managed through a dashboard that gives administrators control while empowering their users to provision resources through a web interface. 以上是官网对 OpenStack 的定义,OpenStack 对数据中心的计算、存储和网络资源进行统一管理。 由此可见,OpenStack 针对的是 IT 基础设施,是 IaaS 这个层次的云操作系统。 下一节我们将正式开始 OpenStack 之旅。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

用户登录
用户注册