Archives de catégorie : Veille

Service Mix

Une solution apache pour les micro services. L’idée est de developper des applications autonomes rendant un service spécifique et unitaire pour une tache métier.
On aura par exemple un micro service pour réceptionner un flux externe, un autre pour l’enrichir ..

La solution est pleine de promesse mais souffre, comme souvent en open source, d’un manque flagrant de docs.

Par exemple, la partie clusterisation avec cellar a été pensée mais de là à l’utiliser…

deploy war with docker

I want to deploy a war file on tomcat using postgres database:


# postgres
docker run -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=<mypassword>-d <mydb>
# then with my pgadmin local client, I create table and data in my database <mydb>
#tomcat
docker run -p 8080:8080 -it -d  tomcat:8.0 
# now  I have a running tomcat listening on 8080 port
#how to deploy my war ?
 docker ps 
1be6f9615019 tomcat:8.0 "catalina.sh run" 6 hours ago
 Up 22 minutes 0.0.0.0:8080->8080/tcp gloomy
_rosalind

# this command give me the ID=1be6f9615019 of my tomcat container 
 

docker cp <local path to my war> ID:/webapps/ 

# restart tomcat
docker stop ID
docker start ID

then with my browser http://192.168.99.100:8080/<myappli>

Quelques outils noSQL

ganglia, sysstat

 

no sql

architecture horizontale (ajout de serveur), souplesse du schema, documents peu structurés
richesse schema, peu d’application
mapreduce interessant si plusieurs tera octets
on favorise ecriture et restitution

=> blog, ged (à voir), logistique,

sql

richesse requete sql
transactionnel
reporting
plusieurs clients
=>erp, reporting,

mixte: e commerce

hbase, cassandra: gros volumes, pas interessant pour moyen volume
couchDB : orientée web, erland, json, rest, perf moyennes
mongoDB: documents, bson, montée en charge horizontale
riak:  clef/valeur, independance des noeuds, performances ++
redis: base en mémoire

 

 

apache

Divers outils:

Kafka: broker, systeme de message comme rabbitMQ, activity tracking sur des sites web …
vcl: fabrication d’environnements dédiés (sorte de vm) distribuable
whirr: api pour les services clouds
zookeeper:  les clients sont rattachés au serveur via des znodes
gora: in memory data model- big data

Olingo:

Pig!    langage d’analyse de gros volumes de données.  mouvance big data

sqoop : etl

HashCode, equals, et toString en java

résultat d’un test:

Comparaison d’implementation: sur 500000 occurences

test 1 (no equals, no hash) :1953
test2 (equals, no hash):1348
test 3 (equals, hash):1262
test 4 (equals, hash,toString):1105

 

le test consiste à remplir une map puis à récupérer des éléments à l’interieur de la map. les éléments de la map sont des classes implémentant successivement rien, equals, puis equals et hashcode, puis equals et hashcode et toString.

le code d’un des tests:

long debut = System.currentTimeMillis();
Map< ClassAvecEqualsEtHash, String> h1 = new HashMap<ClassAvecEqualsEtHash, String>();
for (long i = 0; i < ITER; i++) {
ClassAvecEqualsEtHash item = new ClassAvecEqualsEtHash(i, String.valueOf(i), new Date(i * 1000));
h1.put(item, item.toString());
}
for (long i = 0; i < ITER; i++) {
ClassAvecEqualsEtHash item = new ClassAvecEqualsEtHash(i, String.valueOf(i), new Date(i * 1000));
h1.get(item);
}
long fin = System.currentTimeMillis() – debut;

la classe la plus aboutie

 

class ClassAvecEqualsEtHashtoString {

private Long clef;
private String valeur;
private Date madate;

public ClassAvecEqualsEtHashtoString(Long clef, String valeur, Date madate) {
this.clef = clef;
this.valeur = valeur;
this.madate = madate;
}

public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(clef).append(« , »).append(valeur);
// sb.append(« , »).append(madate); TRES COUTEUX , à revoir

return sb.toString();
}

@Override
public boolean equals(Object o) {
if (o == null || o.getClass() != getClass()) {
return false;
}
ClassAvecEqualsEtHashtoString current = (ClassAvecEqualsEtHashtoString) o;
if (current.clef == clef && current.valeur.equals(valeur) && (current.madate.equals(madate))) {
return true;
}
return false;
}

@Override
public int hashCode() {
int result = 17;
result = 31 * result + clef.intValue();
result = 31 * result + valeur.hashCode();
result = 31 * result + madate.hashCode();
return result;

}
}

 remarques:

la conversion de date en String est trés coûteuse en temps. sur le test 4, le fait de faire un toString sur madate double le temps total, de même en utilisant un SimpleDateFormat.
remplacer la Date par un Long améliore les performances notablement mais cela reste quand même + couteux en temps que la non implémentation du toString;

en ne mesurant que la partie get sur la hashmap pour les 4 tests, effectués independament

j’ai successivement
142 no hash, no equals
305 equals no hash
290 equals et hash
163 equals hash et to string

MySql vs. PostGres

machine de test:

 

windows 8

architecture logicielle

 

Il s’agit d’une application web en mode MVC, avec Spring Core

 

Le persistence provider est Eclipse Link ,l’entity manager est fourni par org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.

Données

mysql

 

Postgres

les 2  tables principales:

 

create table    t_game(id_game integer PRIMARY KEY ,result varchar(5),game_date varchar(20),
site varchar (100), whiteP int, blackP int, event varchar (100),
blackElo varchar(7),whiteElo varchar(7),
pl_round varchar (30),whiteFideId int,blackFideId int, eco varchar(4),moves varchar(1000)

);
create table   t_position_game(id integer PRIMARY KEY ,
id_position int ,id_game int, nb_w int, nb_b int
);

version

 

postgres!: 9.2.4

 

mysql 5.5.32 – MySQL Community Server (GPL)

 

résultats

 

mysql postgres
4 025 438 inserts(a) 2 jours 15h48 15:37:57

(03:23:53:967 sur i7 8go)

99 048 select (b)

99048  insert (137)/update

12h43 6:38

 

a) les inserts sont faits par lecture d’une dizaine de fichiers texte contenant les inserts  à effectuer (mode batch).

 

b) les select ont lieu sur la table t_game uniquement sur le champ moves avec des like,

les insert/update ont lieu dans une table t_stat_by_debut contenant au max 137 items.

 

Outils pour l’agilité

Quelques outils Agile (à partir de http://www.userstories.com/products)

nom description/commentaire lien
scrumy gestion simple des user stories et des taches avec leur etat (todo/in progress, verify, done)mode webla version pro gere le backlog et les sprints, et un acces sécurisé au projet. Dommage que les fonctionnalités intéressantes soient payantes. http://www.scrumy.com/
agilo for scrum gratuit pour 30 joursj’ai essayé le produit avec chrome, beaucoup de bugs, les zones ecrans se chevauchent, et l’ergonomie n’est pas intuitive du toutmode web http://www.agiloforscrum.com
sprintometer version à installer(il faut installer le client et le serveur), pas fait http://sprintometer.com/
Planigle tres bien fait, dommage que ce soit en partie payant http://www.planigle.com/
Banana Scrum pas de timeline en version gratuite http://www.codesprinters.com/http://www.bananascrum.com/
Scrum ninja un nom rigolo http://www.scrumninja.com/scrum-software
kagilum la version gratuite est vraiment limitéepas intuitif du tout https://www.kagilum.com/fr/
agilito url KO https://code.google.com/p/agilito/
Agile tracking tool à installer https://sites.google.com/site/agiletrackingtool/home/installation
Scrumdo tres bien pour les user story, les iterations http://www.scrumdo.com/
 agility limited  gratuitergonomie pas exceptionnelle surtout au niveau de la gestion des taches et des users  https://www.agilitylimited.com
 treelo  pas mal pour gerer les taches , mais pas de timing, gratuit  https://trello.com/
 asana  plus complet de treelo, mais moins ergonomiquegratuit, gere les sous taches
 https://app.asana.com
mingle payant http://www.thoughtworks-studios.com/mingle-agile-project-management
task juggler free http://www.taskjuggler.org/
à voir comment l’installer

 

 

 

 

 

Methodes agiles

Comme toute méthode, les méthodes agiles ont pour but de trouver le meilleur compromis sur les 3 C: Calendrier x Cout  x Contenu

Scrum:

Pour scrum, une itération dure de 3 à 4 semaines
Le cahier des exigences est tenu dans un backlog. Le product backlog pour toute l’application et le sprint backlog pour  le sprint courant. Une pratique est le daily scrum meeting de 15 min ou chacun expose : ce qu’il a fait hier, ce qu’il fait aujourd’hui et ses problemes.

3 roles principaux: le Product owner qui est le responsable fonctionnel, décideur, le scrum master qui anime l’equipe et l’equipe elle meme.

recueil des besoins:

  • mind mapping
  • observation de la concurrence
  • workshop

=> le résultat est un ensemble de user stories formalisées par des postit (electroniques ou non) qui   détermine le backlog.

affiner le chiffrage:

niveau granularite 1 niveau granularite 2 priorite risque valeur effort

estimation : (Pessimiste * 1 + (4* median) + optimiste *1 )/6

autre affinage: 2.5 (charge) ^1/3

technique du pomodoro ;  travail pendant 25 minutes + pause de 3 minutes (pour mail)

l’etat des taches: todo| en cours| à tester| done

Pour bien mener l’equipe et sa construction (teambuilding), d’apres http://thierrycros.net/, il est important que :

  • la parole soit impeccable
  • rien de personnel dans les échanges
  • aucune supposition, il vaut mieux poser les questions
  • faire toujours de son mieux

on ajoutera qu’il faut toujours veiller à faire des feedbacks et à capitaliser
ceux sont les fondements de l’agilité.

 

Optimisation des bases de données

Cet ouvrage plutot clair présente les principales techniques d’optimisation des bases et quelques astuces d’amélioration des performances.

Apres une premiere partie donnant des considérations sur l’usage des outils de statistiques et de mesures, la suite de l’ouvrage affine ces concepts afin de donner des conseils.

Nous apprenons les différents types d’index, l’usage des partitions, des hints (forçage de fonctionnalités) et quelques commandes plsql utiles (for all).

J ai noté quelques remarques:

  • having < where
  • eviter l’usage du <>
  • * n’est pas un bon facteur de select sauf pour les count
  • distinct oblige à un tri
  • il faut eviter les minus intersect et union autant que possible

un bon ouvrage pour élargir ses connaissances et compétences