PIXNET Logo登入

互聯網 - 大數據

跳到主文

本部落格為互聯網熱門頭條訊息管理中心

部落格全站分類:生活綜合

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 3月 07 週二 201721:14
  • 網站文件系統發展分布式文件系統fastDFS

Source: http://www.cnblogs.com/ityouknow/p/5344857.html

 


網站文件系統發展


 


1、單機時代的圖片服務器架構


   初創時期由于時間緊迫,開發人員水平也很有限等原因。所以通常就直接在website文件所在的目錄下,建立1個upload子目錄,用于保存用戶上傳的圖片文件。如果按業務再細分,可以在upload目錄下再建立不同的子目錄來區分。例如:upload\QA,upload\Face等


優點:實現起來最簡單,無需任何復雜技術,就能成功將用戶上傳的文件寫入指定目錄。保存數據庫記錄和訪問起來倒是也很方便。


缺點:上傳方式混亂,嚴重不利于網站的擴展。


 


2、單獨立文件服務器


   隨著公司的業務不斷的發展,將服務和文件放在同一服務器下面的弊端越來越明顯;這個時候就該上線獨立的圖片服務器系統;通過ftp或者ssh工具將文件上傳到圖片服務器的某個目錄下面,在通過ngnix或者apache服務器來做圖片的訪問,給圖片服務器配置獨立的子域名,例如 img.xx.com。在業務處理文件時通過ftp或者ssh將文件上傳到文件服務器,返回給程序一個獨立域名的圖片url地址,網站正常訪問的時候就通過這個URL地址來訪問文件。


優點:圖片訪問是很消耗服務器資源的(因為會涉及到操作系統的上下文切換和磁盤I/O操作)。分離出來后,Web/App服務器可以更專注發揮動態處理的能力;獨立存儲,更方便做擴容、容災和數據遷移;方便做圖片訪問請求的負載均衡,方便應用各種緩存策略(HTTP Header、Proxy Cache等),也更加方便遷移到CDN。


缺點:單機存在性能瓶頸,容災、垂直擴展性稍差


 


3、分布式文件系統


   業務繼續發展,單獨單臺的服務器存儲和響應也很快到達了瓶頸,新的業務要求,文件訪問高響應性,高可用性來響應業務對系統的要求。分布式文件系統,一般分為三塊內容來配合,服務的存儲、訪問的仲裁系統,文件存儲系統,文件的容災系統來構成,總裁系統相當于文件服務器的大腦,根據一定的算法來決定文件存儲的位置,文件存儲系統負責報錯文件,容災系統負責文件系統和自己的相互備份。


優點:擴展能力: 毫無疑問,擴展能力是一個分布式文件系統最重要的特點;高可用性: 在分布式文件系統中,高可用性包含兩層,一是整個文件系統的可用性,二是數據的完整和一致性;彈性存儲: 可以根據業務需要靈活地增加或縮減數據存儲以及增刪存儲池中的資源,而不需要中斷系統運行


缺點:系統復雜度稍高,需要更多服務器


 


 


分布式文件系統fastDFS


1、什么是FastDFS


FastDFS是一個開源的輕量級分布式文件系統。它解決了大數據量存儲和負載均衡等問題。特別適合以中小文件(建議范圍:4KB < file_size <500MB)為載體的在線服務,如相冊網站、視頻網站等等。在UC基于FastDFS開發向用戶提供了:網盤,社區,廣告和應用下載等業務的存儲服務。


 


2、FastDFS架構和原理


FastDFS服務端有三個角色:跟蹤服務器(tracker server)、存儲服務器(storage server)和客戶端(client)。


tracker server:跟蹤服務器,主要做調度工作,起負載均衡的作用。在內存中記錄集群中所有存儲組和存儲服務器的狀態信息,是客戶端和數據服務器交互的樞紐。相比GFS中的master更為精簡,不記錄文件索引信息,占用的內存量很少。


storage server:存儲服務器(又稱:存儲節點或數據服務器),文件和文件屬性(meta data)都保存到存儲服務器上。Storage server直接利用OS的文件系統調用管理文件。


client:客戶端,作為業務請求的發起方,通過專有接口,使用TCP/IP協議與跟蹤器服務器或存儲節點進行數據交互。


FastDFS架構圖1_thumb[9]


 


Tracker相當于FastDFS的大腦,不論是上傳還是下載都是通過tracker來分配資源;客戶端一般可以使用ngnix等靜態服務器來調用或者做一部分的緩存;存儲服務器內部分為卷(或者叫做組),卷于卷之間是平行的關系,可以根據資源的時候情況隨時增加,卷內服務器文件相互同步備份,以達到容災的目的


 


上傳機制:


首先客戶端請求Tracker服務獲取到存儲服務器的ip地址和端口,然后客戶端根據返回的IP地址和端口號請求上傳文件,存儲服務器接收到請求后,生產文件file_id并且將文件內容寫入磁盤返回給客戶端file_id和路徑信息、文件名,客戶端保存相關信息上傳完畢



下載機制:


客戶端帶上文件名信息請求Tracker服務獲取到存儲服務器的ip地址和端口,然后客戶端根據返回的IP地址和端口號請求下載文件,存儲服務器接收到請求后返回文件給客戶端。


 


 


3、如何搭建fastDFS


請參考以下文章:


FastDFS + Nginx 反向代理緩存 安裝與配置


地址:http://www.linux178.com/storage/fastdfs-nginx-cache.html


 


4、使用java調用fastDFS


以下代碼是一個spring mvc中一個完整的上傳請求



 @RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public Object upload(@RequestParam MultipartFile file) {
UploadResponse res
= new UploadResponse();
try {
if(file.isEmpty()){
res.setRet_code(UserCodeEnum.ERR_FILE_NULL.getCode());
res.setRet_msg(UserCodeEnum.ERR_FILE_NULL.getDesc());
}
else{
logger.info(
"UserController-upload-request-file=" + file.getOriginalFilename());
String tempFileName
= file.getOriginalFilename();
//fastDFS方式
ClassPathResource cpr = new ClassPathResource("fdfs_client.conf");
ClientGlobal.init(cpr.getClassLoader().getResource(
"fdfs_client.conf").getPath());
byte[] fileBuff = file.getBytes();
String fileId
= "";
String fileExtName
= tempFileName.substring(tempFileName.lastIndexOf("."));
//建立連接
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer
= tracker.getConnection();
StorageServer storageServer
= null;
StorageClient1 client
= new StorageClient1(trackerServer, storageServer);
//設置元信息
NameValuePair[] metaList = new NameValuePair[3];
metaList[
0] = new NameValuePair("fileName", tempFileName);
metaList[
1] = new NameValuePair("fileExtName", fileExtName);
metaList[
2] = new NameValuePair("fileLength", String.valueOf(file.getSize()));
//上傳文件
fileId = client.upload_file1(fileBuff, fileExtName, metaList);
res.setHead_img(UserConstants.FILE_IMG_URL
+fileId);
res.setRet_code(UserCodeEnum.SUCCESS.getCode());
res.setRet_msg(UserCodeEnum.SUCCESS.getDesc());
}
logger.info(
"UserController-upload-response-" + JsonUtils.o2j(res));
}
catch (Exception e) {
res.setRet_code(UserCodeEnum.ERR_UNKNOWN.getCode());
res.setRet_msg(UserCodeEnum.ERR_UNKNOWN.getDesc());
logger.error(
"UserController-upload-error", e);
}
return res;
}


fastDFS java客戶端配置文件fdfs_client.conf配置如下:



connect_timeout = 30
network_timeout
= 60
charset
= ISO8859-1
http.tracker_http_port
= 8090
http.anti_steal_token
= no
http.secret_key
= 123456
tracker_server
= 192.168.11.***:22122


 


參考:


http://blog.chinaunix.net/uid-20196318-id-4058561.html


http://tech.uc.cn/?p=221


 


(繼續閱讀...)
文章標籤

AutoPoster 發表在 痞客邦 留言(0) 人氣(13)

  • 個人分類:生活學習
▲top
  • 3月 07 週二 201721:14
  • jvm系列(五):tomcat性能調優和性能監控(visualvm)

Source: http://www.cnblogs.com/ityouknow/p/5378874.html


 


tomcat服務器優化


 


1、JDK內存優化


   根據服務器物理內容情況配置相關參數優化tomcat性能。當應用程序需要的內存超出堆的最大值時虛擬機就會提示內存溢出,并且導致應用服務崩潰。因此一般建議堆的最大值設置為可用內存的最大值的80%。 Tomcat默認可以使用的內存為128MB,在較大型的應用項目中,這點內存是不夠的,需要調大.


Tomcat默認可以使用的內存為128MB,Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下設置: JAVA_OPTS='-Xms【初始化內存大小】 -Xmx【可以使用的最大內存】 -XX:PermSize=64M -XX:MaxPermSize=128m' 需要把幾個參數值調大。例如: JAVA_OPTS='-Xms256m -Xmx512m' 表示初始化內存為256MB,可以使用的最大內存為512MB。


  參數詳解 



 -server 啟用jdk 的 server 版;
-Xms java虛擬機初始化時的最小內存;
-Xmx java虛擬機可使用的最大內存;
-XX:PermSize 內存永久保留區域
-XX:MaxPermSize 內存最大永久保留區域
-Xmn jvm最小內存


32G 內存配置示例:



JAVA_OPTS="$JAVA_OPTS -Xms10g -Xmx10g -XX:PermSize=1g -XX:MaxPermSize=2g -Xshare:off -Xmn1024m


 


2、tomcat線程優化


在tomcat配置文件server.xml中的配置中,和連接數相關的參數有:


maxThreads: Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創建的最大的線程數。默認值150。


acceptCount: 指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理。默認值10。


minSpareThreads: Tomcat初始化時創建的線程數。默認值25。


maxSpareThreads: 一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。默認值75。


enableLookups: 是否反查域名,默認值為true。為了提高處理能力,應設置為false


connnectionTimeout: 網絡連接超時,默認值60000,單位:毫秒。設置為0表示永不超時,這樣設置有隱患的。通常可設置為30000毫秒。


maxKeepAliveRequests: 保持請求數量,默認值100。 bufferSize: 輸入流緩沖大小,默認值2048 bytes。


compression: 壓縮傳輸,取值on/off/force,默認值off。 其中和最大連接數相關的參數為maxThreads和acceptCount。如果要加大并發連接數,應同時加大這兩個參數。


32G 內存配置示例:



<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout
="20000" maxThreads="1000" minSpareThreads="60" maxSpareThreads="600" acceptCount="120"
redirectPort
="8443" URIEncoding="utf-8"/>


 


 


使用visualvm性能監控


1、什么是VisualVM


visualvm是jdk自帶的一款監控工具。它提供了一個可視界面,用于查看 Java 虛擬機上運行的基于 Java 技術的程序的詳細信息。VisualVM 對 Java Development Kit (JDK) 工具所檢索的 JVM 軟件相關數據進行組織,并通過一種使您可以快速查看有關多個 Java 應用程序的數據的方式提供該信息。您可以查看本地應用程序以及遠程主機上運行的應用程序的相關數據


2、如何安裝


在jkd bin目錄下有一個jvisualvm.exe文件 雙擊就可以使用


3、如何使用jvisualvm


1、配置JMX管理tomcat:



set JAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9008 -Dcom.sun.management.jmxremote.authenticate=false - Dcom.sun.management.jmxremote.ssl=false


2、重啟tomcat即可


3、雙擊jvisualvm.exe 添加服務器IP地址,添加需要監控jmx端口即可


效果如下:


ss


 


 


 


 


 


(繼續閱讀...)
文章標籤

AutoPoster 發表在 痞客邦 留言(0) 人氣(5)

  • 個人分類:生活學習
▲top
  • 3月 07 週二 201721:14
  • 抓取某一個網站整站的記錄

Source: http://www.cnblogs.com/ityouknow/p/5446199.html
      經常由于某些原因我們需要爬取某一個網站或者直接復制某一個站點,到網上找了很多工具進行測試,試了很多各有各的問題,最終選擇了Teleport Ultra,用起來效果很好;具體的操作手冊等東西就不在這里說了,網上搜索一下有很多,這里主要說遇到的問題:
軟件下載地址:http://download.csdn.net/detail/ityouknow/9506423
工具截圖:
image
測試抓取的網站為簡單心理:www.jiandanxinli.com
抓取后的效果圖
image
 
一般我會選擇復制100級基本上也就把網站的東西全部copy下來了,但是因為Teleport Ultra 是以UTF-8的編碼進行的抓取如果文件中有中文字符,或者gbk編碼的文件就會出現亂碼如下圖:
image
 
當然手動在瀏覽器選擇UTF-8也可以,但是咱不能每次打開都這樣干吧。于是到網站找到一款軟件叫:TelePort亂碼修復工具(siteRepair-v2.0),經過測試可以解決亂碼的問題,這款工具也會清除一些無效的鏈接和html符號等。
軟件下載地址:http://download.csdn.net/detail/ityouknow/9506429
軟件截圖:
image
 
絕大數網站再經過這兩個步驟應該都已經OK了,但是有的網站的層級結構中用到了中文目錄或者中文的文件名就會出現亂碼,類似下面的URL地址:
http://www.xxxx.com/.com/question/除了加鎖,還有什么方法解決資源競爭的問題?/解決方案.html
這樣網站的結構抓取下來就會出現兩種亂碼:1)文件夾名亂碼 2)文件名亂碼
遇到這個問題siteRepair-v2.0工具就會報錯,我估計是不能識別亂碼的文件夾或者文件吧。
 
后來在網上找了一個PHP的程序,進行了簡單的修改測試可以解決這個問題
PHP代碼:convert.php
<?php
function listDir($dir)
{
if(is_dir($dir))
{
if ($dh = opendir($dir))
{
while (($file = readdir($dh)) !== false)
{
if((is_dir($dir."/".$file)) && $file!="." && $file!="..")
{
rename($dir."/".$file,$dir."/".mb_convert_encoding($file,"GBK", "UTF-8"));
listDir(
$dir."/".$file."/");
}
else
{
if($file!="." && $file!="..")
{
$name=rename($dir."/".$file,$dir."/".str_replace('\\','',mb_convert_encoding($file,"GBK", "UTF-8")));
echo '路徑:'.$dir."/".$file.'<br />';
echo '結果: '.str_replace('\\','',mb_convert_encoding($file,"GBK", "UTF-8")).'<br />';
}
}
}
closedir($dh);
}
}
}
?>
<?php
//開始運行
listDir("./convert");
?>

 
在代碼的同級目錄下,新建 convert文件夾,把亂碼的文件放入這個目錄,然后執行convert.php即可。
(繼續閱讀...)
文章標籤

AutoPoster 發表在 痞客邦 留言(0) 人氣(14)

  • 個人分類:生活學習
▲top
  • 3月 07 週二 201721:14
  • 配置中心選型


Source: http://www.cnblogs.com/ityouknow/p/5584762.html
     隨著線上項目變的日益龐大,每個項目都散落著各種配置文件;因為采用分布式的開發模式,項目之間的相互引用隨著服務的不斷增多,相互之間的調用復雜度成指數升高,每次投產或者上線新的項目時苦不堪言,因此需要引用配置中心治理。
 
希望可以滿足一下的條件:
1、集中配置,所以的配置文件集中到一個管理平臺來治理
2、配置中心修改配置后,可以及時推送到客戶端
3、支持大的并發查詢
 
技術調研,配置中心目前有一些開源軟件,如下:
1、Qihoo360/QConf
地址:https://github.com/Qihoo360/QConf
優點:成熟,支持百萬并發 穩定
缺點:大型,稍顯復雜;非java開發語言
2、spring-cloud/spring-cloud-config
地址: https://github.com/spring-cloud/spring-cloud-config
優點:借此學習了解 spring boot\spirng cloud
缺點:依賴于 spring boot;學習內容比較多
3、淘寶 diamond
https://github.com/takeseem/diamond
缺點:已經不維護,學習資料少
4、disconf
https://github.com/knightliao/disconf
優點:使用比較多,java開發
缺點:個人開源項目,也比較新
 
其它參考文章:
配置中心選型
http://vernonzheng.com/2015/02/09/%E5%BC%80%E6%BA%90%E5%88%86%E5%B8%83%E5%BC%8F%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E9%80%89%E5%9E%8B/
如何實現一個配置中心
http://blog.arganzheng.me/posts/configuration-center-implementation.html
spring config介紹
https://segmentfault.com/a/1190000004356362
(繼續閱讀...)
文章標籤

AutoPoster 發表在 痞客邦 留言(0) 人氣(1)

  • 個人分類:生活學習
▲top
  • 3月 04 週六 201715:59
  • [BOT]自己動手實現android 餅狀圖,PieGraphView,附源碼解析

摘要: 本文要介紹的是一個參照手機支付寶app里面記賬本功能里的“餅狀圖”實現的控件。通常app中可能的數據展示控件有柱狀圖,折線圖,餅狀圖等,如果需要一個包含多種View控件的庫,那么 "MPAndroidChart" 是不錯的選擇,如果只是需要一個簡單的獨立的餅狀圖控件,希望PieGraphView滿足

不含病毒。www.avast.com
(繼續閱讀...)
文章標籤

AutoPoster 發表在 痞客邦 留言(0) 人氣(39)

  • 個人分類:生活學習
▲top
  • 3月 04 週六 201713:15
  • 鋼鐵人電影版裝甲與相關科技介紹


鋼鐵人電影版裝甲與相關科技介紹(五版更新)
 
(繼續閱讀...)
文章標籤

AutoPoster 發表在 痞客邦 留言(0) 人氣(2,472)

  • 個人分類:生活學習
▲top
«1...229230

pop-under

參觀人氣

  • 本日人氣:
  • 累積人氣:

線上人數

Marquee

最新文章

  • 文章列表
  • jvm系列(四):jvm調優-命令大全(jps jstat jmap jhat jstack jinfo)
  • spring boot(一):入門篇
  • jvm系列(一):java類的加載機制
  • jvm系列(三):java GC算法 垃圾收集器
  • spring boot 實戰:我們的第一款開源軟件
  • jvm系列(六):jvm調優-從eclipse開始
  • 混合應用技術選型
  • jvm系列(二):JVM內存結構
  • spring boot(五):spring data jpa的使用

熱門文章

  • (1,762)jQuery之前端國際化jQuery.i18n.properties
  • (630)技術筆記:Indy控件發送郵件
  • (513)linux下安裝sqlite3
  • (501)學習筆記: Delphi之線程類TThread
  • (242)VC單選按鈕控件(Radio Button)用法(轉)
  • (149)Android AppBar
  • (103)單條件和多條件查詢
  • (50)淺談config文件的使用
  • (26)Tomcat shutdown執行后無法退出進程問題排查及解決
  • (22)基于 Asp.Net的 Comet 技術解析

文章分類

  • 生活學習 (2,296)
  • 未分類文章 (1)

最新留言

  • [20/04/24] 我是女生想約炮 有男生願意給我溫暖的嗎?我賴是woyou58 於文章「(1)從底層設計,探討插件式GIS框架的...」留言:
    我叫黎兒女生最近內心掙扎著要不要約炮我的line:woy...

文章搜尋

文章精選

誰來我家

Live Traffic Feed