Libvert 가상화 플랫폼을관리하는 API다. Xen KVM VMware ESX등 다양한 기술에 사용가능하며 C로 된 라이브러리이지만 다른 언어에 바인딩 가능하다. 여러 하이퍼바이저들을 사용할때에 이것들을 통합적으로 관리하기 위해서 필요로 한다.


OpenStack

'Cloud Service' 카테고리의 다른 글

데이터 과학이란?  (0) 2015.08.28
Cloud 서비스  (0) 2015.04.13
Posted by MIDDLE
,

Rhapsody Android Profile 

1. 개발된 Android app을 정적 동적으로 분석하는데 도움

- cod visualization : class간 class와 Android Framework간 구조 분석용

- Animation : 실행중 sequence diagram 형태로 동적을 보요줌.


2. Android framwork의 분석과 개선에 도움

- Android framework 역시 1의 방법대로 분석이 필요함

- 고객 입장에서 1의 검증이 만족스럽다면 2는 약간의 시간과 인력을 더투여될뿐 같은작업이라고 봄


3. Android를 포함한 새로운 서비스를 개발할때 설계와 검증에서 외부와 협력도움

-예를 들어 단말로는 Andorid를 사용하고 연동대상은 자동차나 가전제품 또는 서버가 되는 서비스들

- RTC와 연계하여 시내,외 모델 기반 협력 도구로 제안할 것이며 협력의 효율을 높여주는 솔루션이라고봄

'Android' 카테고리의 다른 글

Android 프로젝트 생성  (0) 2010.02.10
Android 설치를 해보자~ v2.1.0  (0) 2010.02.10
Posted by MIDDLE
,


1. 비싸던 컴퓨터에서 보급화된 비싼 컴퓨터가 되어지다가 점점 가격이 싸지는 보급형이 되어지면서 개인사용자를 모델로 출시

중앙 집중형 컴퓨터에서 점차 분산으로 자료를 정리 하다보니 관리가 힘들어지면서 하드웨어에서 소프트웨어로 넘어오게 되었다.

Posted by MIDDLE
,

Cloud 서비스

Cloud Service 2015. 4. 13. 16:20

1. 클라우드의 정의

인터넷을 통해 Resource를 빌려쓰고, 사용한 만큼 지불하는 Service


 

가상화가술을 이용하여



Cloud Computing 

 

기존방식 

Cloud(사용자 중심) 

 가상화 기술을 이용하여

IT자원의 가용률을 높이고

(Maximize Utilization)

구매방식 

IT투자, HW임대

1month or more 

인터넷을 통한 신청

A few Minutes 

 사용자가 필요로 하는것을 직접(Self Service)

제공방식 

Manual (구축) 

1Month or more

Automation(주문) 

A few Minutes

 인터넷을 통해 IT 자원을 실시간으로 빌려 쓰며 (Easy to Use)

제공단위 

물리적 장비단위 

Virtual Machine

Core/시간단위 최소기준 

사용한 만큼 지불하는 Service 방식 (Pay as you Go) 

지불방식 

임대/HW에 따른 과금 

사용량 기반 




2. 클라우드의 특징

- Agility improves with users' ability to re-probision technological infrastructure resources.

- Application Programming Interface (API) accessibility to software that enables machines to interact with cloud software in the same way the user interface facilitates interaction between humans and computers. Cloud computing systems typically use REST-based APIs.

- Cost is claimed to be redueced and in a public cloud delivery model capital expenditure is converted to operational expenditure. This is purported to lower barriers to entry. as infrastructure is typically provided by a third-party and does not need to be purchased for one-time or infrequent intensive computing tasks. Pricing on a utility computing basis is fine-grained with usage-based options and fewr IT skills are required for implementation (in-house).

- Deivce and Location independence enable users to access systems using a web browser regardless of their location or what device they are using (e.g. PC, mobile phone). As infrastructure is off-site(typically provided by a third-party) and accessed via the Internet, users can connect from anywhere.

- Multi-tenancy enables sharing of resources and costs across a large pool of users thus allowing for:

~ Centralization of infrastructure in locations with lower costs (such as real estate, eletricity, etc)

~ Peak-load capacity increases (users need not engineer for highest possible load-levels)

~ Utilization and efficiency improvements for systems that are often only 10%-20% utilized.

- Reliability is improved if multiple redundant sites are used. which makes well-designed cloud computing suitable for business continuity and disaster recovery.

- Sacalability via dynamic ("on-demand") provisioning of resources on a fine-grained. self-service basis near real-time, without users having to engineer for peak loads.

(resource가 많은양을 갑작스럽게 요구로 되어질때 항상 같은 퍼포먼스가 나올수 있도록 확장 지원)

- Performance is monitored, and consistent and loosely coupled architectures are constructed using web services as the system interface.

- Security could improve due to centralization of data, increased security-focused resources, etc.. but concerns can presist about loss of control over certain sensitive data, and the lack of security for sotred kernels. Security is often as good as better than under traditional systems, in part becuase providers are able to devote resources to solving security issues that many customers cnanot afford. However, the complexity of security is greatly increased when data is distributed over a wider area or greater number of devices and in multi-tenant systems that are being shared by unrelated users. in addition, user access to security audit logs may be difficult or impossible. Private cloud installations are in part motivated by users desire to retain control overthe infrastructure and avoid losing control of information security.

- Maintenance of cloud computing application is easier, because they do not need to be installed on each user's computer. They are easier to support and to improve, as the changes reach the clients instantly.


이러한 형태의 애플리케이션을 개발하도록 노력


3. 클라우드 컴퓨팅의 유형

 - 소유 방식에 따라 private 과 public cloud로 구분

 - IT자원의 성격에 따라 IaaS, PaaS, SaaS로 분류


서비스 유형 

 

 Public Cloud

인터넷 상으로 여러 사용자들에 의해 공유되는 IT 환경
Cloud Sevice Provider가 제공 및 관리

 Private Cloud

한 기업이나 기관에 의해 인트라넷상에서 배타적으로 사용되는 IT환경
기업 및 기관에 의해 통제 및 관리 

 




서비스 모델 

 

 SaaS

 기업 또는 일반 소비자가 다양한 어플리케이션을 인터넷 및 웹브라우저를 통해 서비스 제공

ex) prezi, onlineoffice

 PaaS

 기업이 Web App등의 어플리케이션을 개발하기 위한 환경을 서비스 형태로 제공

 IaaS

 물리적 서버(CPU, Memory, O/S), 스토리지 네트워크를 가상화하여 다수의 고객에게 Flexible하게 인프라 서비스 형태로 제공

 




클라우드 애플리케이션

클라우드 애플리케이션과 기존 애플리 케이션의 차이


 Service Model

Self Service Model

애플리케이션 개발과 운영이 밀접한 관계를 가짐 

SW & deploy Model 

Distributed 

애플리케이션이 독립 서비스로 모둔 분산 되어있음(분산 컴퓨팅) 

Scaling Model 

Horizontal Scaling 

애플리케이션이 서비스의 부하를 인지하여 부하를 분산 

HA Model 

Software HA 

애플리케이션이 장애를 인지하여 자동으로 Failover 시킴 

SLA Platform 

Designed to fail(always on) 

 

Hardware Platform

Cheap commodity hardware 

 









하드웨어 따로              하드웨어 공유         OS 공유              WaS하나에           애플리케이션하나로

vm 따로                    IaaS 방식             VMware                 여러가지 공유       많은 조직들이 사용

                                                                                                     어렵다.                  데이터 제공량이 많다.                                                   공유할수록 필요 데이터 적어진다.

                                                                            그러나 문제는 독립적으로 적용하기위해서는                                                                             그만큼 많은 데이터베이스와 개개인에 맞춤

                                                                            Class를 적용시켜줘야한다.

                                                                      Java에서는 tenant Level Class분리가 힘듬..

매우 중요!!!




보이는건 IaaS레벨정도이지만 안보이는 기술필요가 엄청나게 많다. 멀티태넌시를 어떻게 구현할 수 있을까

쉽지 않은 문제. 각지역마다 4-50개 있다치면 배포하는데에만 엄청난 시간이 필요 전세계를 테스트 해야만한다.


Dynamic Resource Usage

네트워크,스토리지의 사용량보다 가상 서버의 사용량이 제일 많음(가상머신 생성, 제거, 스펙 변경 등)

가상화 시켜 배포하면 리소스를 생성하고 없애는게 굉장히 빈번하다. 


클라우드에서 소수의 운영자가 수많은 서버를 관리하는 비결은 자동화 도구

페이스북은 IT인프라에 대한 매뉴얼 관리를 최대한 제거했다. 서버와 저장매체는 오픈 컴퓨트프로젝트(OCP)에 기반한 디자인 덕분에 도구없이도 교체 가능하다. 사이보그(Cybog)라 불리는 시스템은 오작동하는 서버들을 자동으로 수리하여, 셰프같은 프로비저닝 도구가 수천대의 서버관리를 도와준다.

페이스북은 최신 자동화 툴은 클러스터 플래너란것이다. 페이스북은 끊임없이 비즈니스 요구사항변화에 맞추기 위해 수천대의 서버를 규칙적으로 배포한다. 클러스터플래너는 전세계 데이터 센터에 걸쳐 서버 클러스터의 최적의 위치를 찾아준다.

그는 우리가 효율적으로 서버 수리를 할 수 있는건 데이터를 수집하고 분석하는 자동화된 시스템을 보유했기 때문 이라며 사이보그는 재시작같은 단순한 작업을 요하는 서버 수리를 시도한다.


Virtual Server의 생성 절차

가상 서버를 생성하는 전체 과정은 단순한 과정이 아닌 매우 복잡하고 많은 작업을 동반함

Virtual Network -> Virtual Storage -> Virtual Server 

-> OS installation -> 

Software Installation -> Software Configuration -> Verification

소프트웨어 생성시 config는 발생한다.

개발자가 3가지를 해야하지만 까다롭다.




'Cloud Service' 카테고리의 다른 글

데이터 과학이란?  (0) 2015.08.28
Cloud 사용 기술들 정리  (0) 2015.04.23
Posted by MIDDLE
,

org.apache.catalina.stratup.Constants

접근에 필요한 패키지나 내부에서 사용되는 상수값들이 저장되어있다. 웹에 쓰이는 주소등 서버 config파일 건들고 싶을때는 여기를 참조하면 된다.



org.apache.catalina.startup.Catalina

시작과 멈춤을 관리하는 쉘이 담겨있는 Class


setConfigFile(java.lang.String)

@deprecated

public void setConfig(String file){

configFile =file;

}

public void setConfigFile(String file){

configFile =file;

}

public String getConfigFile(){

return configFile;

}

public void setUseShutdownHook(boolean useShutdownHook){

this.useShutdownHook = useShutdownHook;

}

public boolean getUseShutdownHook(){

return useShutdownHook;

}


Set the shared extensions class loader

 public void setParentClassLoader(ClassLoader parentClassLoader) {


        this.parentClassLoader = parentClassLoader;


 }

public ClassLoader getParentClassLoader(){

if (parentClassLoader != null){

return (parentClassLoader);

}

return ClassLoader.getSystemClassLoader();

}

public void setServer(Server server){

this.server = server;

}

public Server getServer(){

return server;

}




prcoessing을 계속해야 한다면 return true 아니면 false;

protected boolean arguments(String args[]) {


        boolean isConfig = false;


        if (args.length < 1) {

            usage();

            return (false);

        }


        for (int i = 0; i < args.length; i++) {

            if (isConfig) {

                configFile = args[i];

                isConfig = false;

            } else if (args[i].equals("-config")) {

                isConfig = true;

            } else if (args[i].equals("-nonaming")) {

                setUseNaming( false );

            } else if (args[i].equals("-help")) {

                usage();

                return (false);

            } else if (args[i].equals("start")) {

                starting = true;

                stopping = false;

            } else if (args[i].equals("stop")) {

                starting = false;

                stopping = true;

            } else {

                usage();

                return (false);

            }

        }


        return (true);


    }



return a File object representing our configuration file.

protected File configFile() {


        File file = new File(configFile);

        if (!file.isAbsolute())

            file = new File(System.getProperty("catalina.base"), configFile);

        return (file);

}

 create the Apache Digetster File will be  using for startup

protected Digester createStartDigester()

 create the Apache Digetster File will be  using for shutdown

protected Digester createStopDigester()


socket, inputstream,outputstream, 등 닫는다.

stopServer();


Start a new server instance 새로 시작

public void load()

'오픈소스 분석' 카테고리의 다른 글

Eclipse기반 Tomcat 소스 분석  (0) 2015.04.09
Posted by MIDDLE
,

Tomcat의 시작은 BootStrap.java에서 시작하게 됩니다.

main object 

private static Bootstrap daemon = null;


Demon reference

주로 쓰게되는 Daemon

catalinaDaemon

클래스 로더들

commonLoader

catalinaLoader

sharedLoader


private void initClassLoaders()

createClassLoader를 이용하여 3개의 클래스로더에게 데이터를 넣어준다.



private ClassLoader createClassLoader(String nameClassLoader parent)

ClassLoader를 생성하는 곳으로

HomeToken과

baseToken을 이용하여 Local repository를 체크 합니다

그후에 JAR URL repository 탐색


return할 classLoader 생성부분

 ClassLoader classLoader = ClassLoaderFactory.createClassLoader
(locationstypesparent);



Initialize daemon

처음으로는 Catalina path를 설정한뒤

ClassLoader를 생성합니다.

initClassLoaders()를 실행합니다.

그런뒤 Thread를 이용하여 ClassLoader들을 Thread로 돌립니다.


말그대로 Class Load하는 부분이다. SecurityClassLoad안에는 톰켓 실행에 필요한 주요 package 실행이 들어있다.

SecurityClassLoad.securityClassLoad();


   loadCorePackage(loader);

        loadLoaderPackage(loader);

        loadSessionPackage(loader);

        loadUtilPackage(loader);

        loadJavaxPackage(loader);

        loadCoyotePackage(loader);

        loadHttp11Package(loader);

        loadTomcatPackage(loader);

이런식으로 주요 패키지들을 로드한다.


Class들을 전부 로드가 완료 되어지면 이제 본격적으로 시작되는 클래스인 Catalina 클래스를 instance를 받아온다

Class startupClass =

            catalinaLoader.loadClass

            ("org.apache.catalina.startup.Catalina");

        Object startupInstance = startupClass.newInstance();


그이후 Start Load Stop 등 기본 작동에 대해서 있게된다


Main Method 

parametes: args Command line arguments to be processed

daemon이 null이면

BootStrap 생성자 실행

이후 init();

daemon = bootstrap;


현재 상태에따라 다음 진행을 결정한다.

           String command = "start";

            if (args.length > 0) {

                command = args[args.length - 1];

            }


            if (command.equals("startd")) {

                args[args.length - 1] = "start";

                daemon.load(args);

                daemon.start();

            } else if (command.equals("stopd")) {

                args[args.length - 1] = "stop";

                daemon.stop();

            } else if (command.equals("start")) {

                daemon.setAwait(true);

                daemon.load(args);

                daemon.start();

            } else if (command.equals("stop")) {

                daemon.stopServer(args);

            } else {

                log.warn("Bootstrap: command \"" + command + "\" does not exist.");

            }


getCatalinaBase

Get the value of the catalina.base environment variable

setCatalinaBase

Set the catalina.base System property to the current working directory if it has not been set.

getCatalinaHome


setCatalinaHome




Posted by MIDDLE
,

Apache의 오픈소스중에 유명한 Tomcat을 분석해보고 싶어져서 시작해봅니다.


1. Apache에서 Tomcat을 다운로드 받습니다.

http://apache.tt.co.kr/tomcat/tomcat-8/v8.0.21/src/apache-tomcat-8.0.21-src.zip

분석 하고싶은 버전으로 받으시면 됩니다.


2. Tomcat을 빌드 하기 위해서 필요한 Ant를 다운로드 받습니다.

http://ant.apache.org/


2-2 eclipse 실행후 Window -> Preferences -> Ant -> Runtime Global Entries 선택 후 Add External JARs 클릭

그후 jdk폴더의 lib안에 있는 tools.jar 추가 합니다.


3. Ant Project를 이용하여 Tomcat 등록하기


이후에 Ant Buildfile: 의 Browse.. 클릭한 후 톰켓 소스폴더안의 build.xml파일을 선택합니다.

Ant로 빌드가 완료가 되어지면 Tomcat 프로젝트가 프로젝트 목록에 뜨게됩니다.

그러나 아직libraray가 완전하지 않기 때문에 에러가 많이 뜨고있습니다.


4. lib추가 하기

프로젝트에서 우클릭 이후 lib폴더를 하나 생성합니다.


생성된 lib폴더 안에 Jar파일들을 넣습니다. 넣게될 Jar파일 목록으로는

build하면서 생긴 lib안의 *.jar파일들

ouput/build/bin/*.jar

output/build/lib/*.jar

output/extras/tomcat-juli.jar

output/extras/tomcat-juli-adapters.jar

output/extras/webservices/jaxrpc.jar

아까 받아둔 Ant 

Ant 안의 lib안의 *.jar파일들


마지막으로 axis2 lib안의 *.jar파일

http://axis.apache.org/

에서 받으시면 됩니다.


4.2 모든 파일들을 lib폴더에 copy & paste 하였다면 다음으로는 lib를 등록.

해당 프로젝트 우클릭


Add Jars 선택한 후 lib 폴더안의 모든 Jar선택



4.3 모든 lib를추가하였지만 에러가 뜨고는 있지만 괜찮습니다.


5. Run Configuration을 조정합니다.



       5.1 Java Application 선택한후 new로 생성

Project를 맞춰 선택 한 이후에 org.apache.catalina.startup.Bootstrap을 찾아서 선택 합니다.


Arguments 탭으로 이동한 뒤 

Program arguments 탭에는 start

VM arguments 탭에는


-Djava.util.logging.config.file="D:\JGWK\test_tomcat_6.0.36\conf\logging.properties" 

-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 

-Dcatalina.base="C:\workspace\test_tomcat_6.0.36

-Dcatalina.home="C:\workspace\test_tomcat_6.0.36"

를 입력합니다.

C:\workspace\test_tomcat_6.0.36 이부분들은 자신의 Tomcat위치를 잡아줍니다.


6. 실행합니다.



'오픈소스 분석' 카테고리의 다른 글

톰켓 소스분석 2일차  (0) 2015.04.13
Posted by MIDDLE
,
간단한 Hello World를 출력하기 위한 Project를 생성

개발 시점(Perspective)는 java, Java EE 아무거나 상관이 없습니다.



1.Projct Explorer에서 우클릭 -> New -> Other...선택



2. Android Folder안에있는 Android Project를 선택한다.-> Next >



3. Project 설정
(그림 번호별 설명)
1. Project의 이름을 정한다.
           2. Build Target 이용할 API버전을 정하는곳.
           3. 현 Application이름을 정한다.나중에 해당 프로젝트를 아이콘  이라던지 올릴때 이 이름으로 올라간다.
           4. Activity를 생성할때에 Package가 있을곳을 정해준다.
           5. Create Activity말그대로 엑티비티를 만드는곳이다. (이부분을 이용하여서  Class 같은것을 만든다고 생각하면 편하다.)
           6. Finish 클릭



4. Project 생성 후 모습 HelloWorld라는 Activity를 생성된것을 볼 수있다.



5. HelloWorld 실행 하기 실행시킬 Project 우클릭 한뒤, Run As -> Run Configurations.. 선택



6. Android Application 우클릭 -> New 선택


7. 실행할 Project이름을 적어준다.



8. Target을 이전 글에서 생성한 Android Virtual Device2.1.0 으로 선택한뒤 Apply  해주신뒤 Run을 선택해주세요.


9. 해당 화면이 뜨셨다면, 성공~!


여기까지 보시느라 수고하셨습니다.~

'Android' 카테고리의 다른 글

Andorid 설계 개발 지원툴  (0) 2015.04.15
Android 설치를 해보자~ v2.1.0  (0) 2010.02.10
Posted by MIDDLE
,
1. Java를 설치한다.
 다운 받는곳 : http://java.sun.com

-다운로드 경로 http://java.sun.com/javaee/downloads/index.jsp



2. Android 개발환경을 위하여, Eclipse 설치
다운 받는곳http://www.eclipse.org/
(개인적으로 톰켓, 플랙스 같은것이 깔려있다면, 이클립스를 아예 다른곳에다가 깔아서 위에 얻혀주실것을 추천합니다. 안드로이드 생각보다 무거워요.)

-다운로드 경로 http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/SR1/eclipse-jee-galileo-SR1-win32.zip&url=http://d2u376ub0heus3.cloudfront.net/technology/epp/downloads/release/galileo/SR1/eclipse-jee-galileo-SR1-win32.zip&mirror_id=1033



3. Android를 설치 합니다.

다운 받는곳 : http://developer.android.com/

-다운로드 경로 http://developer.android.com/sdk/download.html?v=android-sdk_r04-windows.zip




4. Eclipse를 실행 시켜줍니다.


4.1 Help - > Install New SoftWare.. 선택


4.2 Add..선택 -> Name (Android식별할만한것) 입력 ->
Location (http://dl-ssl.google.com/android/eclipse/) 입력- > OK


4.3 Developer Tools 체크 -> Next >

4.4 Android Eclipse에 올리기 완료뒤 - > 상단 탭 Window -> Preferences선택

4.5 좌측 메뉴중 Android를 선택 -> SDK Location에 자신 이 안드로이드를 설치한곳을 잡아준다. -> 확인을 눌러준뒤 에뮬레이터를 설치한다.

4.6 Android SDK and AVD Manager를 선택

4.7 installed Packages를 선택-> Refresh 클릭 -> 설치 하고싶은 에뮬레이터를 선택
(저는 Update All.. 선택하여서 모든 버전의 에뮬레이터를 쓸수가 있지만 Server가 전송속도가 늦어서 거의 1시간30분정도 받았습니다. 써본결과 2.0.1, 2.1.0, Google APIs 6 And Google APIs 7정도가 좋을듯합니다.)  -> Update클릭

4.8 Virtual Devices AVD(Android Virtual Devices)를 생성합니다.(나중에 Project를 실행시킬때 쓰이는 Virtual Machine입니다. Java의 JVM같은것,  같은버전의 AVD를 이름만 다르게 여러개를 이 곳 에서 생성하여서 에뮬레이터를 여러개를 동시에 돌리실수도 있습니다.)
좌측 메뉴의 Virtual Devices 선택 -> New... 선택

4.9 Name: 어떤 Version으로 생성하였는지 식별 할만한 이름을 적어주세요.

     Target : Version을 정해주는곳(Google전용 API들을 이용하고싶다면, Google APIs로 생성하셔야 합니다.)-> Create AVD


설치 하시는데 수고 많으셨어요. 다음 장에서는 간단한 Project생성과 실행시켜보기를 해볼게요.

'Android' 카테고리의 다른 글

Andorid 설계 개발 지원툴  (0) 2015.04.15
Android 프로젝트 생성  (0) 2010.02.10
Posted by MIDDLE
,